【问题标题】:MVC3 Intranet MembershipMVC3 内网成员资格
【发布时间】:2012-09-17 13:14:17
【问题描述】:

我正在使用连接到 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?无需编写自定义会员/个人资料/角色提供者就可以做到这一点吗?

【问题讨论】:

  • 这里有一个类似的问题,有几个链接。 stackoverflow.com/questions/2250921/…
  • 我很欣赏这篇文章,他的所作所为很有趣;但是,我并没有尝试同时进行表单和 Windows 身份验证,我只是想利用 Windows 身份验证。
  • 尝试将更改用户名添加到表中的 DOMAIN\username 中,看看是否有效。两者之间的用户名不同(表单与窗口)。

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多