【发布时间】:2020-09-25 01:04:49
【问题描述】:
我需要在客户的索赔中填写“属性”。 我正在 ProfileService 类中写下关于 IS4 服务器的声明:
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
// ...
Claim claim = new Claim("userData", "personalRights");
string valuePersonalRights = JsonConvert.SerializeObject(userRights);
claim.Properties.Add(GetKeyValuePair("rights", valuePersonalRights));
claims.Add(claim);
context.IssuedClaims.AddRange(claims);
}
private KeyValuePair<string, string> GetKeyValuePair(string key, string value)
{
KeyValuePair<string, string> keyValuePair = new KeyValuePair<string, string>(key, value);
return keyValuePair;
}
在服务器上的此声明中有记录“属性”: https://postgres-russia.ru/wp-content/files/is4_img/on_server.jpg
但是,在客户端,此声明的属性缺失: https://postgres-russia.ru/wp-content/files/is4_img/on_client.jpg
客户端配置:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.Scope.Add("domainGroups");
options.Scope.Add("geolocation");
options.Scope.Add("fullname");
options.SaveTokens = true;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name"
};
});
如何在客户端获取声明属性?
【问题讨论】:
-
您的客户端是否需要经过身份验证的用户声明?例如用户名或电子邮件是什么?
-
System.Security.Claims.Claim 具有属性 IDictionary
System.Security.Claims.Claim.Properties。我在身份验证服务器上创建了一个声明,并将一些信息放入 System.Security.Claims.Claim.Properties。身份服务器声明中的属性计数器: 1. 当我在客户端获得一组声明时,此声明的属性计数器为 0。如何传输声明的属性?
标签: identityserver4