4

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

纠正此问题的最佳途径是什么,而不必将我的整个数据库更改为具有域 \ 用户 ID 而不仅仅是用户 ID?这可以在不必编写自定义会员/个人资料/角色提供者的情况下完成吗?

4

1 回答 1

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

于 2012-10-09T23:21:36.603 回答