我有一个MVC网站,我正在从Forms转换为联合身份验证。我能够连接到ADFS服务器并验证身份验证。但是,该站点当前使用ActiveDirectoryMembershipProvider来验证用户的角色,因为不同的角色允许不同的访问。
我无法弄清楚如何填充MembershipProvider以便我可以使用以下内容:
User.IsInRole(@"MY-ROLE")
和此:
[Authorize(Roles = "MY-ROLE")]
我的web.config中有这个片段,它适用于表单身份验证,但不能在我的联合站点中工作:
<membership defaultProvider="ADMembershipProvider">
<providers>
<clear />
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionProtection="Secure" attributeMapUsername="sAMAccountName" connectionStringName="ADConn" connectionUsername="LotusLDAPUser" connectionPassword="LotusLDAPUser" />
</providers>
</membership>
我已经阅读了很多MSDN文档但仍然遇到问题所以请不要只是回答文档链接。我会很感激一些示例代码。
更新: 我在我的web.config中添加了一个RoleProvider。角色提供程序已成功用于表单应用程序版本,因此我认为值是正确的我只是错过了将其添加到联合版本的web.config中。这就是我所拥有的:
<roleManager enabled="true" defaultProvider="ActiveDirectoryRoleProvider" cacheRolesInCookie="true" cookieName=".ADLibraryROLES" cookiePath="/" cookieTimeout="1440" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="true" cookieProtection="All">
<providers>
<clear />
<add name="ActiveDirectoryRoleProvider" connectionStringName="ADConn" connectionUsername="LotusLDAPUser" connectionPassword="LotusLDAPUser" attributeMapUsername="sAMAccountName" type="MyNamespace.ActiveDirectoryRoleProvider" />
</providers>
</roleManager>
仍然返回false
User.IsInRole(@"MY-ROLE")
和
[Authorize(Roles = "MY-ROLE")]
对于我认识的用户&#34; MY-ROLE&#34;
答案 0 :(得分:1)
问题是我没有设置会话令牌Cookie。在表单身份验证版本中,我有代码:
FormsAuthentication.SetAuthCookie(user.UserName, true);
在测试联合版本时,我没有设置身份验证cookie,需要这一行:
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(token);
令牌是SessionSecurityToken
从Claim
创建的。