我们已经开始构建一个 asp.net mvc 应用程序。应用程序将包含一个主数据库,其中包含用户、项目、公用表等……以及许多数据库(都具有相同的结构),其中包含与特定项目相关的数据。使用可以有一些全局角色(存储在主数据库中)和一些项目特定角色(存储在项目数据库中),并且每个用户可以链接到许多项目。
我的目标是构建一个支持经典用户名/密码身份验证和 OpenID 身份验证的身份验证系统(我们为此使用 DotNetOpenAuth)和支持我上面描述的角色系统的授权系统。
但是我遇到了几个问题:1.)我认为我们应该支持单个用户的(用户名/密码和 Ppenid)身份验证选项,以便用户名/密码用户在决定他们时不需要创建额外的帐户将使用一个 OpenId,我认为我们应该像 SO 那样为单个用户支持多个 OpenId(如果某些提供程序已关闭)。
2.) 我认为最好的数据库是:
table Users (UserId (PK), LastActivityDate)
table UsernameLogins (UserId (PK,FK), Username, Password, IsApproved, IsLockedOut, LastLoginDate, LastLockedOutDate, etc...)
table OpenIdLogins(OpenIdUrl (PK), UserId(FK),LastLoginDate)
table Profiles(UserId(PK,FK), DisplayName(Unique), Email (Unique), FirstName, LastName, Address, Country, etc...)
table Roles(RoleName (PK), RoleType(1=GlobalRole,2=ProjectRole).
table UserRoles(UserId(FK,PK), RoleName(PK)).
3.) 我应该创建自己的提供商(MembershipProvider、ProfileProvider、RoleProvider)吗?似乎 MembershipProvider 不太适合 OpenId 身份验证(当然我只能支持基本方法(GetUser,ValidateUser))?我应该只为用户名/密码登录实现 MembershipProvider 吗?我认为 ProfileProvider 和 RoleProvider 不会那么难实现吗?我应该只使用 FormsAuthentication 并使用我自己的“服务”吗?
我们还在为 DI 使用 NHibernate 和 Spring。
任何建议将被认真考虑。
谢谢!