向 ID 令牌 OpenID 添加自定义声明

Posted

技术标签:

【中文标题】向 ID 令牌 OpenID 添加自定义声明【英文标题】:Adding custom claim to ID token OpenID 【发布时间】:2021-11-14 12:27:05 【问题描述】:

我在 .NET Core 3.1 上,我正在尝试向 JWT 令牌添加自定义声明,但我无法这样做。如果您查看下面的代码,我可以使用这行代码读取自定义令牌

User.Claims.Where(x => x.Type == "role")

但是当我获取 JWT 令牌并将其放入 JWT.ms 时,令牌中不存在新的自定义声明。 .OnTokenValidated 是我尝试在 idp 返回之前将自定义声明添加到令牌的事件。

AddOpenIdConnect("test",o => 
               o.SignInScheme = "Cookies";
               o.SignOutScheme = "Cookies";
               o.ClientId = "f";
               o.ClientSecret = "0e";
               o.Authority = "https://test.com";
               o.ResponseType = OpenIdConnectResponseType.Code;
               o.MetadataAddress = "https://test.com/.well-known/openid-configuration";
              
              
               **o.Events.OnTokenValidated = async (ctx) =>
               
                   var claimsIdentity = ctx.Principal.Identity as ClaimsIdentity;

                   claimsIdentity.AddClaim(new Claim("role", "Admin"));
               ;**
             
               o.SaveTokens = true;
               o.GetClaimsFromUserInfoEndpoint = true;

【问题讨论】:

【参考方案1】:

首先,一些基础知识:

您在客户端中使用的 AddOpenIdConnect 从不修改任何令牌。 令牌一经发行就永远不会被修改。

当您使用此代码时:

claimsIdentity.AddClaim(new Claim("role", "Admin"));

您将其添加到从 ID-Token 创建的用户 (ClaimsPrincipal) 中。然后,此声明通常保存在本地会话 cookie 中。所以这一行永远不会修改任何标记。

也许您可以尝试在授权服务中添加该声明?

【讨论】:

以上是关于向 ID 令牌 OpenID 添加自定义声明的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌

如何向 azure b2c 访问令牌添加自定义声明?

如何根据用户输入在 Jwt Token 上添加自定义声明?

AD B2C - 重新获取令牌后缺少自定义声明

使用 Windows 身份验证时向身份添加自定义声明

B2C ID 令牌中缺少电话号码声明