【发布时间】: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