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

Asp.net 在登录期间检查其他要求?(MVC,表单身份验证),asp.net,asp.net-mvc,authentication,asp.net-membership,forms-authentication,Asp.net,Asp.net Mvc,Authentication,Asp.net Membership,Forms Authentication,背景: 我正在将SqlMembership提供程序合并到一个现有系统中,在该系统中我正在构建一个web前端。会员数据库将保存在单独的数据库中 除了登录帐户之外,还需要在主数据库中设置帐户之间的其他映射,以便帐户能够登录 假设此表授予用户使用系统的权利 我的问题: 我想以某种方式将其合并到提供者中。不需要太多的工作就可以吗?(还是将其保留在AccountMembershipService类中更好?) 事实上,不管怎样,我非常有兴趣学习如何向提供商添加额外的登录要求 我问这个问题是因为当我早些时候考

背景:

我正在将SqlMembership提供程序合并到一个现有系统中,在该系统中我正在构建一个web前端。会员数据库将保存在单独的数据库中

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

假设此表授予用户使用系统的权利

我的问题:

我想以某种方式将其合并到提供者中。不需要太多的工作就可以吗?(还是将其保留在AccountMembershipService类中更好?) 事实上,不管怎样,我非常有兴趣学习如何向提供商添加额外的登录要求

我问这个问题是因为当我早些时候考虑创建一个自定义成员资格提供商时,当时似乎有点不知所措

换句话说:

我想了解一般如何扩展成员资格提供程序类,特别是如何扩展登录方法(ValidateUser)

考虑到这一点,似乎可以简单地将默认提供程序子类化,并作为第一步覆盖ValidateUser调用base.ValidateUser。
然而,它可能会也可能不会那么简单,我很高兴听到关于实现或扩展成员资格提供程序的任何第一手经验。

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

在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");
            }

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

在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");
            }

我想做一些类似的事情,其中一个要求是使用Oracle DB,因此我实现了OracleMembership提供程序,因此我不能浪费时间重写Oracle成员资格提供程序(它工作得很好),第二个要求是使用自定义授权遗留系统。所以我意识到MVC2或MVC3附带的Internet应用程序模板附带了一个站点安全性的小实现,具体来看一下AccountMembershipService类。您可以将所有这些元素从MVC应用程序移动到单独的程序集,这样您甚至可以在客户端实现上使用它。AccountMembershipService使用成员资格提供程序作为基础身份验证系统,并可以选择使用FormsAuthentication

因此,我建议您看看该实现。您可以将附加的身份验证代码放在那里,这样您的应用程序将保持更干净,您不需要重新发明轮子,您就有机会添加自己的代码


致意

我想做类似的事情,其中一个要求是使用Oracle DB,因此我实现了OracleMembership提供程序,因此我不能浪费时间重写Oracle成员资格提供程序(它工作得很好),第二个要求是使用自定义授权遗留系统。所以我意识到MVC2或MVC3附带的Internet应用程序模板附带了一个站点安全性的小实现,具体来看一下AccountMembershipService类。您可以将所有这些元素从MVC应用程序移动到单独的程序集,这样您甚至可以在客户端实现上使用它。AccountMembershipService使用成员资格提供程序作为基础身份验证系统,并可以选择使用FormsAuthentication

因此,我建议您看看该实现。您可以将附加的身份验证代码放在那里,这样您的应用程序将保持更干净,您不需要重新发明轮子,您就有机会添加自己的代码


致以最诚挚的问候

我对如何处理数据库或auth Cookie不太感兴趣,而是感兴趣。正如我之前所说,我发现这是一项艰巨的任务,因此我正在寻找添加额外登录要求的示例或方法。正如我从您的额外登录要求中了解到的,您需要一些基于角色的资源限制。e、 g.如果是菜单,一组用户可以看到整个菜单,而另一组用户的访问权限可能有限。这是您要查找的还是其他内容。不,我想在登录期间进行一些检查,同时避免登录控制器中出现意大利面状的混乱。或者如标题所示:“在登录期间检查其他要求?”。什么支票是无关紧要的。在哪里以及如何扩展成员资格提供程序类是我想要的。哦,但这正是我想要避免的解决方案。我想学习如何扩展会员资格。你问得不多。我认为您必须编写这里提到的一些代码,我对如何处理数据库或auth Cookie不太感兴趣,而是更感兴趣。正如我之前所说,我发现这是一项艰巨的任务,因此我正在寻找添加额外登录要求的示例或方法