考虑放弃编写自定义会员和角色提供程序的想法。有什么意见?

3
我正在使用ASP.NET构建一个Web应用程序,具有以下安全要求:
  1. 必须能够与主身份验证方案集成,并返回一个唯一密钥给应用程序,以指示用户已通过第三方网站登录。
  2. 必须能够使用现有的用户/角色表。
  3. 如果用户不是第三方网站的成员,则可以使用表单身份验证并允许用户通过单独的登录页面登录。
我尝试自定义SQL角色和成员提供程序,但遇到问题,特别是存在强类型MembershipUser对象,其中包含uniqueIdentifier(providerKey),没有空间容纳我的两个自定义键(用于标识用户)。
我应该放弃自定义的成员提供程序实现,改用cookie/session吗?我真的很想使用内置功能,但似乎做不到。
3个回答

1

你可能想要做的是在现有功能的基础上构建你的项目1,首先尝试这样做。通过返回的信息,自动登录用户。如果第一个过程失败了,使用内置代码进行标准身份验证。

我已经多次在DotNetNuke上为客户构建了这种类型的系统,它非常有效。


你如何处理想要在登录/表单cookie中持久化的自定义字段?比如说,你需要从系统中获取其他数据的ID?换句话说,你如何“添加”到ASP Membership Provider所提供的内容中? - Caveatrob
我们使用会员提供程序中存在的配置文件属性功能来存储额外的数据。 - Mitchel Sellers
那么您会使用档案来存储额外的字段吗?档案是否可以从数据库中的现有表中加载? - Caveatrob
在我们的情况下,我们使用提供者的方法在登录时同步配置文件项。 - Mitchel Sellers


0

我成功地放弃了会员提供者,完全不使用它。我创建了一个新的 IMembershipService 接口和一个实现来处理我的 Web 应用程序用户的创建和验证。

我创建了自己的用户模型。这使我能够在我的应用程序中拥有灵活的角色模型。我可以自由地创建上下文域角色并将它们与实际的用户模型解耦。

这真的不难。记得为你的密码添加 salt 等,并阅读一些安全书籍。

你仍然可以使用 FormsAuthentication 来实现这个方法。

大多数依赖于 asp.net 会员提供者的系统都有某种程度上的分裂。例如,在 CommunityServer 中,你将有两个 Users 表,其中 cs_Users 引用了 aspnet_users 的 MembershipId 并引入了另一个 UserId。它还镜像了用户名等等。


我正在创建您所描述的内容。有什么提示吗?需要注意些什么? - Gichamba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接