访问令牌中的自定义声明

时间:2016-05-16 06:55:52

标签: openid-connect identityserver3

1-)我试图添加几个声明来访问令牌,虽然调试我观察,它已被添加到AuthenticationResult-声明,但我没有在JWT访问令牌中看到。请在下面找到图片以供参考。我添加了一个名为" mem"价值123。

我在AuthenticationLocalAsync方法中添加了以下内容。

IEnumerable claim = new Claim [] {new Claim(" mem"," 123")};

        context.AuthenticateResult =
            new AuthenticateResult(context.UserName, context.UserName, claim);

debugging, It includes the custom claim

2-)第二个问题 - 当我使用PostMan作为客户端时,没有执行GetProfileDataAsync方法,因为正在为Mobile客户端开发API服务器,所以我使用的是PostMan客户端。登录本身我想得到我在第一点提到的索赔。请帮助,我已经花了很多时间来弄清楚这两点。

由于

2 个答案:

答案 0 :(得分:1)

  1. 指定声明的资源范围或将声明添加到现有资源范围。
  2. 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)。
    2. https://identityserver.github.io/Documentation/docsv2/configuration/clients.html

      1. 在您的客户中请求范围。

答案 1 :(得分:0)

首先,我想提一下我还不是Identity Server专家。但我会尽我所能。

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

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

这是我最好的猜测。