身份服务器声明 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")
}
};
您还可以使用 ScopeClaim
的 AlwaysIncludeInIdToken
属性 将声明包含在身份令牌和访问令牌中。
有关详细信息,请参阅 https://identityserver.github.io/Documentation/docsv2/configuration/scopesAndClaims.html。
我目前正在编写一个 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")
}
};
您还可以使用 ScopeClaim
的 AlwaysIncludeInIdToken
属性 将声明包含在身份令牌和访问令牌中。
有关详细信息,请参阅 https://identityserver.github.io/Documentation/docsv2/configuration/scopesAndClaims.html。