如何将角色添加到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可能会有一些好处,但这对我来说目前不是一个选项。
我在这方面花了很长时间,所以任何帮助都能得到感激!
在查看了这个链接和这个链接后,我终于找到了答案。
我最初没有得到的一件事是,为了使用ClaimsAuthenticationManager
,您需要在web.config的<microsoft.identityModel><services>
部分中添加额外的一行来连接实现。
因此:
<claimsAuthenticationManager type="MyCustomClaimsAuthenticationManager" />
我想知道为什么我的代码从来没有被执行过。。