我需要将一个STS(安全令牌服务)添加到ASP.NET Webforms网站。主要问题是我需要在身份验证发生后为角色添加声明,因为身份提供者没有角色信息。
我使用类似下面的代码在本地STS中实现了CustomSecurityTokenService
。这段代码按预期工作 - 无论如何,我需要在稍后的过程中添加评论“在这里为用户获取角色”中的位。
// 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可能会有一些好处,但目前这不是我的选择。
我已经花了一个年龄,所以任何帮助都感激不尽!