SqlMembershipProvider 作为远程服务

SqlMembershipProvider as a remote service

是否有任何解决方案可以从不同的服务器使用 SqlMembershipProvider?

动机:我们公司的安全分区政策不再允许直接从网络服务器连接到数据库。我们有一个遗留 ASP.NET classic 网站,其中包含 SqlMembershipProvider 和相应的连接字符串 web.config - 这违反了安全策略,因此需要返工 - 像往常一样只需最少的工作。

到目前为止我的想法:一个直接的解决方案是在应用程序服务器上创建一个 Web 服务,该服务将在后台使用 SqlMembershipProvider 并公开必要的方法。这将由实现 MembershipProvider 的代理 class 在 Web 服务器上使用。但是,我不想重新发明热水 - 特别是如果它是一项旧技术 - 所以如果已经有更好的想法或现成的解决方案,请提出建议。会员数据库在多个应用程序之间共享,因此更愿意保留。

这在理论上是可行的,但您必须继承 sql 提供程序 classes,(角色和我的成员资格,从而编写您自己的提供程序。“其他”服务器将当然与 sql 安全提供程序数据库有一些连接,因此理论上其他服务器会破坏您试图避免的非常相同的规则。那么,当其他服务器破坏相同的规则时,它将如何工作你在这个应用程序中不允许的东西?我的意思是,你可以从 web.config 中删除连接字符串,然后将它说成某种类型的静态 class。我的意思是如果这里唯一的原因和目标是从 web.config 中删除连接字符串信息,那么对于 THEN re-write 安全提供商来说,这确实是一项艰巨的任务。

因此,您当然可以打造自己的供应商。您需要的 3 个提供者中的每一个的方法数量都相当大,但在这些事件中,您只需要几个。但是,您不仅需要继承 3 个 classes(Visual studio 可以并且会自动为您写出代码存根),而且您还必须在 OTHER 上添加和编写所有这些方法您计划访问的服务器。

因此,您将有大量的事件和 Web 方法可以写入另一台服务器。

我已经编写了自己的提供程序 - 我的原因是我不想使用内置提供程序生成的 table 的“标准”集,而是想使用一些现有的 table 来自现有应用程序。然而,这仍然是值得的,因为通过使用正确和标准的安全提供程序,所有内置的 IIS 安全设置(例如每个文件夹的 web.config 中的安全页面)都将起作用。 (因此,这比尝试推出自己的安全性要好得多)。

因此,您的目标和想法并没有那么糟糕,但它需要两个网站上的代码才能实现。

当您继承安全角色提供者 classe 时,您会得到:

现在,从上面?我没有费心去实施所有的方法。只有少数。

(这意味着我不必使用 IIS 工具来设置和管理角色,但它们在设置文件夹和那些仅限于给定角色的页面方面确实工作得很好。

从上面来看,我真的只需要这些:

FindusersInRole

GetAllRoles

GetRolesForUser

GetUsersInRole

IsUserInRole。

剩下的呢?我只是让他们空白,这样说:

所以,我没有费心去 re-create 所有的方法 - 实际上我把大部分留空了。

“会员提供者”也是如此。

但是,要“仅”从 web.config.

中获取连接字符串,这一切看起来确实需要大量工作

那么,为什么不直接将连接字符串移出 - 将它放在其他地方呢?因此,您可能仍想继承现有的角色和成员身份提供程序 classes,从而为连接字符串设置基于代码的方法。

但是,要设置对另一个站点的 Web 服务调用?哎呀,您必须在另一台服务器上为每个角色 class 方法以及成员资格提供程序 class 创建一个 Web 方法。我想如果您整天都在编写 Web 方法,那么您以前做过很多这样的事情吗?那就不会太辛苦了。

在我看来,将连接设置从 Web 配置中移出会容易得多,并且连同继承角色和成员资格提供程序,然后您可以覆盖(在 Web 配置之外提供您自己的连接字符串)。

但是,不,我不知道有针对此问题的预制解决方案。

如前所述,在大约 30 种方法中,我只使用了其中的 4-5 种,而且我没有费心编写所有方法。因此,例如,我没有 re-create“将用户添加到角色”,因为直接编辑角色 table 并添加我需要的 3-5 个角色会更容易,因此不会改变它多年来。