背景
我正在将SqlMembership提供程序整合到我正在构建Web前端的现有系统中。会员资格数据库将保存在单独的数据库中。
除了登录帐户之外,还需要在主数据库中建立帐户之间的其他映射,以便帐户能够登录。
假设此表格为用户提供了使用该系统的权利。
我的问题:
我想以某种方式将其合并到提供者中。没有太多工作可以吗? (或者将它保存在AccountMembershipService类中会更好吗?) 实际上,无论如何,我都非常有兴趣学习如何将额外的登录要求添加到提供者中。
我问这个是因为当我一直在寻找创建一个自定义成员资格提供者时,它似乎在那个时候有点压倒性。
换句话说:
我想了解如何扩展成员资格提供程序类以及如何扩展登录方法(ValidateUser)。
给定sample ODBC implementation看起来似乎只能将默认提供程序子类化并覆盖ValidateUser,调用base.ValidateUser作为第一步。 然而,它可能会或可能不会那么简单,我很高兴听到任何实施或扩展会员提供者的第一手经验。
答案 0 :(得分:0)
为了扩展成员资格提供程序,使您拥有与主数据库具有一对一关系的表,并通过此表处理其他要求。此外,在实施和扩展默认会员提供商时,您可能需要在authcookies中存储额外信息,您可以从here,here和here
获取其他信息。在GetUserCredentials中,您将执行其他操作以进行其他检查,而RoleID是您登录页面上的一些下拉菜单,您将在登录的post方法中收到。
FormsAuth.SignIn(userName, rememberMe);
ApplicationRepository _ApplicationRepository = new ApplicationRepository();
MembershipUser aspUser = Membership.GetUser(userName);
SessionUser CurrentUser = _ApplicationRepository.GetUserCredentials(aspUser.ProviderUserKey.ToString(), RoleID);
if (CurrentUser == null)
{
ModelState.AddModelError("_FORM", "Invalid Role ");
FormsAuth.SignOut();
return View("signin");
}
答案 1 :(得分:0)
我想做类似的事情,其中一个要求是使用Oracle数据库,所以我实现了OracleMembership提供程序,因此我不能浪费时间重写oracle成员资格提供者(它工作得非常好),第二个要求是使用自定义授权遗留系统。所以我意识到MVC 2或3附带的Internet应用程序模板附带了一个小的站点安全实现,特别是看看AccountMembershipService类。您可以将所有这些元素从MVC应用程序移动到单独的程序集中,这样您甚至可以在客户端实现上使用它。 AccountMembershipService使用Membership provider作为底层身份验证系统,并可选择使用FormsAuthentication。
所以我建议你看一下这个实现。您可以在此处添加其他身份验证代码,以便您的应用程序保持清洁,并且您无需重新发明轮子,并且您有机会添加自己的代码。
最好的问候