访问令牌中的自定义声明



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客户端。在登录本身,我想得到我在第一点提到的索赔。请帮忙,我已经花了很多时间来弄清楚这两点了。

感谢

  1. 指定索赔的资源范围,或将索赔添加到现有资源范围

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")
    }
};
  1. 确保您的客户端可以请求该作用域(通过将AllowAccessToAllScopes设置为true或在客户端上显式指定AllowedScopes)

https://identityserver.github.io/Documentation/docsv2/configuration/clients.html

  1. 请求客户端中的范围

首先我想说的是,我还不是Identity Server专家。但我会尽力的。

我个人不会在AuthenticateLocalAsync方法中分配声明。此逻辑应移动到索赔提供程序。

但是,如果您坚持在身份验证步骤中添加声明,那么您的问题很可能仍然存在于ClaimsProvider中。令牌中包含的索赔由索赔提供者直接处理。因此,可能是GetAccessTokenClaimssync()甚至可能不包括添加到主体的声明,或者有某种逻辑明确阻止返回自定义声明。

这是我最好的猜测。

最新更新