我正在编写一个角度应用程序,首先对think texture identityserver3进行身份验证。 这很好,我收到了没有任何问题的持有人令牌。 当我在调用API时使用我的令牌时,我已通过身份验证。我可以看到我的用户ID,但丢失了我的声明(用户名,角色,...)。 如何使用我的令牌转移我的声明,或从身份服务器获取角色,我该怎么办?
答案 0 :(得分:1)
您可以通过将声明添加到API的范围,告知Identity Server在访问令牌中包含特定声明。
示例:
var apiScope = new Scope {
Name = "myApi",
DisplayName = "My API",
Type = ScopeType.Resource,
Claims = new List<ScopeClaim> {
new ScopeClaim("myClaimType")
}
};
您还可以使用AlwaysIncludeInIdToken
的{{1}}属性将声明包含在身份令牌和访问令牌中。
有关详细信息,请参阅https://identityserver.github.io/Documentation/docsv2/configuration/scopesAndClaims.html。
答案 1 :(得分:0)
我们正在使用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 ...
}
}
}