身份服务器声明 asp.net API

Identity server claims asp.net API

我目前正在编写一个 angular 应用程序,它首先针对 think texture identityserver3 进行身份验证。 这工作正常,我收到了不记名令牌,没有任何问题。 当我在 API 的呼叫中使用我的令牌时,我通过了身份验证。我可以看到我的用户 ID,但丢失了我的声明(用户名、角色...)。 我需要做什么才能使用我的令牌转移我的声明,或者从身份服务器获取角色?

我们正在使用 MS Web API 2 和 Thinktecture Identity Server v3 做一些非常相似的事情。

为了验证用户的声明,我们创建了一个身份验证过滤器,然后直接调用身份服务器来获取用户的声明。不记名令牌仅授予身份验证,由 API 单独获取声明。

protected override bool IsAuthorized(HttpActionContext actionContext)
    {
      string identityServerUrl = WebConfigurationManager.AppSettings.Get("IdentityServerUrl") + "/connect/userinfo";

      using (var httpClient = new HttpClient())
      {
        httpClient.DefaultRequestHeaders.Authorization = actionContext.Request.Headers.Authorization;

        var response = httpClient.GetAsync(identityServerUrl).Result;
        if (response.IsSuccessStatusCode)
        {
          string responseString = response.Content.ReadAsStringAsync().Result;
              Dictionary<string, string> claims = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseString.ToLower());
          ... Do stuff with your claims here ...
        }
    }
}

您可以通过将声明添加到您的 API 范围来告诉 Identity Server 在访问令牌中包含特定声明。

示例:

var apiScope = new Scope {
    Name = "myApi",
    DisplayName = "My API",
    Type = ScopeType.Resource,
    Claims = new List<ScopeClaim> {
        new ScopeClaim("myClaimType")
    }
};

您还可以使用 ScopeClaimAlwaysIncludeInIdToken 属性 将声明包含在身份令牌和访问令牌中。

有关详细信息,请参阅 https://identityserver.github.io/Documentation/docsv2/configuration/scopesAndClaims.html