1-)我正在尝试向访问令牌添加一些声明,在调试时我观察到,它已经添加到AuthenticationResult-claims中,但我在JWT访问令牌中看不到。请找到下面的图片以供参考。我添加了一个名为"mem"值123的声明。
我在AuthenticationLocalAsync方法中添加了如下内容。
IEnumerable claim=new claim[]{new claim("mem","123")};
context.AuthenticateResult =
new AuthenticateResult(context.UserName, context.UserName, claim);
调试,它包括自定义声明
2-)第二个问题是-当我使用PostMan作为客户端时,GetProfileDataAsync方法没有被执行,因为API服务器正在为移动客户端开发,所以我使用PostMan客户端。在登录本身,我想得到我在第一点提到的索赔。请帮忙,我已经花了很多时间来弄清楚这两点了。
感谢
- 指定索赔的资源范围,或将索赔添加到现有资源范围
https://identityserver.github.io/Documentation/docsv2/configuration/scopesAndClaims.html
var scope = new Scope
{
Name = "memScope",
DisplayName = "Scope for mem claim",
Type = ScopeType.Resource,
Claims = new List<ScopeClaim>
{
new ScopeClaim("mem")
}
};
- 确保您的客户端可以请求该作用域(通过将AllowAccessToAllScopes设置为true或在客户端上显式指定AllowedScopes)
https://identityserver.github.io/Documentation/docsv2/configuration/clients.html
- 请求客户端中的范围
首先我想说的是,我还不是Identity Server专家。但我会尽力的。
我个人不会在AuthenticateLocalAsync方法中分配声明。此逻辑应移动到索赔提供程序。
但是,如果您坚持在身份验证步骤中添加声明,那么您的问题很可能仍然存在于ClaimsProvider中。令牌中包含的索赔由索赔提供者直接处理。因此,可能是GetAccessTokenClaimssync()甚至可能不包括添加到主体的声明,或者有某种逻辑明确阻止返回自定义声明。
这是我最好的猜测。