使用Thinktecture Identity Server在身份验证后添加声明

时间:2015-03-06 21:19:32

标签: asp.net-identity thinktecture-ident-server

我正在使用Thinktecture Identity Server V3进行SSO,并使用Implicit flow配置我的客户端应用程序。一旦用户通过本地登录进行身份验证,我想在客户端应用程序中添加对该原则的附加声明。

在客户端应用程序中执行此操作的最佳位置是什么?如何结合使用?

2 个答案:

答案 0 :(得分:2)

我自己正在研究这个问题,并在我的网络表单项目中使用了声明转换。

我使用自定义ClaimsAuthenticationManager实现了声明转换,以便为传入的Principal添加管理员角色。

下面我提供了有关如何向我的应用程序添加声明的详细信息。

在我的全局文件中: Global.asax.cs

<a href="user.php">foo</a>

ClaimsTransformer.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;
}

网络配置

然后,我限制访问任何没有管理员权限的人尝试使用位置标记访问应用程序的admin子目录。

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"));
    }
}

我希望这会有所帮助。

答案 1 :(得分:1)

您正在寻找的是索赔转换。 Here是可以帮助您入门的链接。示例适用于ASP.NET Web窗体,但对于MVC也是如此。