在登录期间检查其他要求? (MVC,表单身份验证)

时间:2011-06-13 12:55:55

标签: asp.net asp.net-mvc authentication asp.net-membership forms-authentication

背景

我正在将SqlMembership提供程序整合到我正在构建Web前端的现有系统中。会员资格数据库将保存在单独的数据库中。

除了登录帐户之外,还需要在主数据库中建立帐户之间的其他映射,以便帐户能够登录。

假设此表格为用户提供了使用该系统的权利。

我的问题:

我想以某种方式将其合并到提供者中。没有太多工作可以吗? (或者将它保存在AccountMembershipService类中会更好吗?) 实际上,无论如何,我都非常有兴趣学习如何将额外的登录要求添加到提供者中。

我问这个是因为当我一直在寻找创建一个自定义成员资格提供者时,它似乎在那个时候有点压倒性。

换句话说:

我想了解如何扩展成员资格提供程序类以及如何扩展登录方法(ValidateUser)。

给定sample ODBC implementation看起来似乎只能将默认提供程序子类化并覆盖ValidateUser,调用base.ValidateUser作为第一步。 然而,它可能会或可能不会那么简单,我很高兴听到任何实施或扩展会员提供者的第一手经验。

2 个答案:

答案 0 :(得分:0)

为了扩展成员资格提供程序,使您拥有与主数据库具有一对一关系的表,并通过此表处理其他要求。此外,在实施和扩展默认会员提供商时,您可能需要在authcookies中存储额外信息,您可以从hereherehere

获取其他信息。

在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。

所以我建议你看一下这个实现。您可以在此处添加其他身份验证代码,以便您的应用程序保持清洁,并且您无需重新发明轮子,并且您有机会添加自己的代码。

最好的问候