如何在身份服务器 4/身份验证代码流中请求访问令牌的附加声明?

Posted

技术标签:

【中文标题】如何在身份服务器 4/身份验证代码流中请求访问令牌的附加声明?【英文标题】:How to request additional claims for access token in identity server 4 / auth code flow? 【发布时间】:2018-04-09 14:47:46 【问题描述】:

如何在身份服务器 4/身份验证代码流中为访问令牌 jwt 请求额外声明?在我的身份验证代码流登录期间,我的自定义配置文件服务始终显示 RequestedClaimTypes 为 0,因此生成的访问令牌 jwt 具有我的主题声明,但没有名字、姓氏或电子邮件声明。

这是我从客户那里请求的范围: "TestApi openid 个人资料电子邮件"

这是我在身份服务器上的客户端定义:

 new Client                     
                ClientId = "authorizationCodeClient2",
                ClientName = "Authorization Code Test",
                ClientSecrets = 
                                        new Secret("secret".Sha256())
                                ,
                Enabled = true,
                AllowedGrantTypes = GrantTypes.Code,
                RequireConsent = true,
                AllowRememberConsent = false,
                RedirectUris =
                new List<string> 
                 "http://localhost:5436/account/oAuth2"
                ,                    
                AllowedScopes =  "TestApi", "openid", "profile", "email" ,
                AccessTokenType = AccessTokenType.Jwt
            

将https://github.com/bayardw/IdentityServer4.Authorization.Code 用于测试客户端。

【问题讨论】:

【参考方案1】:

我发现身份服务器可以让您有选择地使用用户配置文件声明标记 id 令牌(而不必调用 userinfo 端点)。您基本上为该特定客户端设置了一个布尔属性:

AlwaysIncludeUserClaimsInIdToken = true;

注意,您需要在您的身份验证请求中请求以下范围:(openid 个人资料电子邮件)

【讨论】:

请注意,如果您有很多声明,当它具有一定大小时,它可能会遇到与 IdentityServer 交互的问题。我遇到了这个,我不记得我遇到的确切限制或场景。

以上是关于如何在身份服务器 4/身份验证代码流中请求访问令牌的附加声明?的主要内容,如果未能解决你的问题,请参考以下文章

如何生成Vimeo未经身份验证的访问令牌?

如何在 WCF 服务中实现自定义身份验证

Oauth2 - 客户端凭证流中的长寿命令牌与重新身份验证

如何在 api 请求标头中插入 api 身份验证所需的 jwt 令牌?

如何在 DRF 中使用身份服务器 4 验证 JWT 令牌?

请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据 automl