MVC3 Intranet会员资格

时间:2012-09-17 13:14:17

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

我正在使用连接到SQL Server dB的默认MembershipProvider,ProfileProvider和RoleProvider构建MVC3 Intranet 应用程序。如果我使用Forms身份验证,角色提供程序将正确填充。当我切换到Windows身份验证时,角色提供程序不再填充。这是通过在代码中放置一个断点并查看“Roles.GetRolesForUser()”来测试的。我怀疑发生的是传递给数据库的用户ID是'DOMAIN \ USERID'(这是User.Identity.Name中的内容),而数据库中的用户ID只是用户ID。

由于一切都是默认的,因此没有太多要发布的代码。

<authentication mode="Windows" />
<authorization>
  <deny users="?"/>
</authorization>
  <membership defaultProvider="AspNetSqlMembershipProvider">
    <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
  <properties></properties>
</profile>
  <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider" cacheRolesInCookie="true">
    <providers>
    <clear />
    <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>

我首先想到的是,我们可以在将身份传递给成员资格提供者之前删除域名,但User.Identity.Name只是获取。

更正此问题的最佳途径是什么,而不必将整个数据库更改为拥有domain \ userid而不仅仅是userid?这可以在不必编写自定义成员资格/配置文件/角色提供程序的情况下完成吗?

1 个答案:

答案 0 :(得分:1)

如果您只想使用Windows身份验证,那么您不希望使用SqlRoleProvider,而是希望使用WindowsTokenRoleProvider,它将返回其AD角色。 (没有理由使用成员资格提供程序,因为在使用Windows身份验证时,如果没有经过身份验证,则无法访问该网站)

如果你想使用Windows身份验证,但是使用SqlRoles,那么你可能想要这样做:

http://weblogs.asp.net/scottgu/pages/Recipe_3A00_-Implementing-Role_2D00_Based-Security-with-ASP.NET-2.0-using-Windows-Authentication-and-SQL-Server.aspx