如何将角色添加到Windows Identity Foundation(WIF)声明中

本文关键字:Foundation WIF 声明 Identity Windows 角色 添加 | 更新日期: 2023-09-27 17:58:07

我需要向ASP.NET Webforms网站添加STS(安全令牌服务)。主要问题是,在进行身份验证后,我需要添加角色声明,因为身份提供程序没有角色信息。

我已经使用类似于下面的代码在本地STS中实现了CustomSecurityTokenService。这段代码按预期工作——然而,我需要在稍后的过程中在注释"getrolesforuserhere"下添加一位。。

        // Get the incoming identity 
        IClaimsIdentity callerIdentity = (IClaimsIdentity)principal.Identity;
        // Issue custom claims.
        ClaimsIdentity outputIdentity = new ClaimsIdentity("Federation");
        var username = callerIdentity.Name;
        var domain = "DOMAIN";
        outputIdentity.Claims.Add(new Claim(ClaimTypes.Name, callerIdentity.Name));
        outputIdentity.Claims.Add(new Claim(ClaimTypes.WindowsAccountName, string.Format("{0}''{1}", domain, username)));

        // get roles for user here:
        var roles = "Admin"; 
        string[] rolelist = roles.Split(',');
        foreach (var role in rolelist)
        {
            outputIdentity.Claims.Add(new Claim(ClaimTypes.Role, role));
        }
        return outputIdentity;

我遇到的问题是,我现在无法获得角色,因为它们是由身份提供者之外的服务提供的。我需要等到回到RP(应用程序)才能获得它,但到那时,由于我的角色设置,web.config中的安全设置已将我锁定。

 <location path="Pages/Secure/Messages/Default.aspx">
        <system.web>
            <authorization>
                <allow roles="Admin, Tecchies"/>
            </authorization>
        </system.web>
    </location>

我原以为我可以在global.asax中使用一个事件,但到目前为止,我还无法在这里获得任何工作选项。类似这样的代码:

var currentUser = Service.GetUser(callerIdentity.Name);
foreach (var role in currentUser.Roles) 
{
           outputIdentity.Claims.Add(new Claim(ClaimTypes.Role, role));
}

我正在使用.NET 4.0-尽管我知道升级到4.5可能会有一些好处,但这对我来说目前不是一个选项。

我在这方面花了很长时间,所以任何帮助都能得到感激!

如何将角色添加到Windows Identity Foundation(WIF)声明中

在查看了这个链接和这个链接后,我终于找到了答案。

我最初没有得到的一件事是,为了使用ClaimsAuthenticationManager,您需要在web.config的<microsoft.identityModel><services>部分中添加额外的一行来连接实现。

因此:

  <claimsAuthenticationManager type="MyCustomClaimsAuthenticationManager" />

我想知道为什么我的代码从来没有被执行过。。