使用 Active Directory 成员身份提供程序进行站点身份验证

Using Active Directory Membership Provider for Site Authentication

我有一个 MVC 站点,我正在将其从表单转换为联合身份验证。我能够连接到 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 文档,但仍然遇到问题,所以请不要只用 link 来回答文档。我将不胜感激一些示例代码。

更新: 我在我的 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")]

对于我在 "MY-ROLE"

中认识的用户

问题是我没有设置会话令牌 Cookie。在表单身份验证版本中,我有代码:

FormsAuthentication.SetAuthCookie(user.UserName, true);

测试联合版本时我没有设置身份验证 cookie,需要这一行:

FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(token);

其中令牌是从我的 Claim 创建的 SessionSecurityToken