如何使用单个自定义角色提供程序同时使用窗口和表单身份验证

时间:2012-04-14 19:53:59

标签: asp.net-mvc-3 asp.net-membership windows-authentication roleprovider

我有一个基于Role实体的自定义角色提供程序,以及一个名为RoleUser的多对多关系,在我的表单auth用户实体和角色之间。我想将此角色提供程序切换为现在使用Windows身份验证。我可以方便地回顾用户表单,并在我的用户实体中创建AD用户的“阴影”。

这是可行还是不赞成,有没有关于这种设置的好文章等?

我正在使用针对SQL 2005的EF Code First,并且我没有使用自定义成员资格提供程序,因为我的用户控制器和存储库处理所有我需要的很好;只是角色提供者。

2 个答案:

答案 0 :(得分:1)

在这种情况下,成员资格提供程序可以是使用enitity框架DbContext中的“user”和“role”模型的自定义成员资格提供程序。用户模型可以具有布尔字段,该字段仅告知用户是否是域用户。处理域用户时,您可以选择从Active Directory域导入用户。管理员只需将所需的AD用户导入数据库即可。一旦他们在数据库中,他们就可以登录。在帐户控制器登录操作中,我们可以检查用户是否是域用户,如果他随后使用域控制器对用户进行身份验证,然后允许他登录并向他发送令牌。这是一篇关于带表单的AD身份验证的好文章。这是在VB,但你可以得到的东西。您还可以按照文章创建支持身份验证的提供程序。

http://www.cmjackson.net/2009/10/23/asp-net-mvc-using-forms-authentication-with-ldap/

答案 1 :(得分:0)

请注意,我们有5种类型的身份验证:

1- Anonymous Authentication

2- Asp.net Impersonation

3- Basic Authentication HTTP 401 Challenge

4-表单身份验证HTTP 302登录/重定向

5- Windows身份验证HTTP 401质询

MVC身份验证的哲学是指这样一个事实:MVC不使用ViewState来验证用户。它不使用视图状态或基于服务器的表单。这使得MVC框架非常适合希望完全控制应用程序行为的开发人员。

根据MVC标准,Windows身份验证适用于Intranet应用程序,并且因为安全问题等原因而对Internet应用程序进行身份验证。

同时使用窗口和表单身份验证并不常见。但你可以使用它们的混合codeproject article。除非您想通过表单身份验证和后端存储窗口帐户信息执行操作,否则可以通过程序可存储到数据库等等。只确保不同类型的身份验证之间没有挑战。

另一个重要的事情是,身份验证和授权之间存在差异,您可以在web.config中配置它们,如下所示:

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication> 
<authorization>
    <deny users="?"/>
</authorization>

<authentication mode="Windows"/>
<authorization>
   <deny users="?"/>
</authorization>

MSDN Article也可能有所帮助。