我使用Thinktecture Identity Server V3进行SSO,并使用隐式流配置了我的客户端应用程序。一旦用户通过本地登录进行了身份验证,我想在客户端应用程序中为原理添加附加声明。
在客户端应用程序中进行此操作的最佳位置是什么?如何将其结合起来?
我自己也在研究这个问题,并在我的web表单项目中使用了声明转换。
我使用自定义ClaimsAuthenticationManager实现了Claims转换,以便向传入的主体添加管理员角色。
以下是我如何在申请中添加索赔的详细信息。
在我的全局文件中:Global.asax.cs
// manual way of invoking claims transformation
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
var transformer = new ClaimsTransformer();
var principal = transformer.Authenticate(string.Empty, ClaimsPrincipal.Current);
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
}
ClaimsTransformer.cs类
public class ClaimsTransformer : ClaimsAuthenticationManager
{
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
if (!incomingPrincipal.Identity.IsAuthenticated)
{
return base.Authenticate(resourceName, incomingPrincipal);
}
return CreatePrincipal(incomingPrincipal);
}
private ClaimsPrincipal CreatePrincipal(ClaimsPrincipal principal)
{
var userName = principal.Identity.Name;
var claims = new List<Claim>();
//Set admin role claim
if (userName == "Chuck Norris")
{
claims.Add(new Claim(ClaimTypes.Role, "Admin"));
}
return new ClaimsPrincipal(new ClaimsIdentity(claims, "App Claims"));
}
}
Web配置
然后,我限制任何没有管理员声明的人使用位置标签访问应用程序的管理员子目录。
<location path="Admin">
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*"/>
</authorization>
</system.web>
我希望这能有所帮助。
您想要的是索赔转换。这是将让你开始的链接。示例是为ASP.NET Web窗体制作的,但它与MVC相同。