我正在構建一個MVC3 Intranet應用程序使用默認的MembershipProvider,ProfileProvider和RoleProvider連接到一個SQL Server dB。如果我使用表單身份驗證,角色提供程序正確填充。當我切換到Windows身份驗證時,角色提供程序不再填充。這是通過在代碼中放置斷點並查看「Roles.GetRolesForUser()」來測試的。我懷疑發生的事情是傳遞給數據庫的用戶標識是'DOMAIN \ USERID'(這是User.Identity.Name中的內容),而數據庫中的內容僅僅是用戶標識。MVC3 Intranet Membership
因爲一切都是默認的,所以沒有太多的代碼可以發佈。
<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是隻得到。
糾正此問題的最佳途徑是什麼,而不必將整個數據庫更改爲擁有域\ userid而不是userid?這可以在不必編寫自定義會員/簡介/角色提供者的情況下完成嗎?
這是一個類似的問題,有幾個鏈接。 http://stackoverflow.com/questions/2250921/mixing-forms-authentication-with-windows-authentication – Niklas
我appreaciate帖子,他做了什麼是有趣的;然而,我不是試圖做窗體和Windows身份驗證,我只是想利用Windows身份驗證。 –
嘗試將更改的用戶名添加到表中的DOMAIN \ username並查看它是否有效。兩者之間的用戶名不相同(窗體與窗口)。 –