You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#应用中集成AWS Cognito与Identity Server时缺失Claims问题

解决C#客户端集成AWS Cognito与Identity Server后Claims缺失问题

以下是几个排查和解决方向,按优先级推进:

  • 检查Identity Server的Claims转发配置
    Identity Server不会默认把从Cognito拿到的所有Claims都传给客户端,得手动指定要传递的字段:

    • 先确认客户端配置的AllowedClaims列表里包含"email";
    • 如果使用了自定义ProfileService,要在GetProfileDataAsync方法里,把context.Subject.Claims中的email Claim添加到context.IssuedClaims集合,否则签发令牌时会漏掉该字段。示例代码:
      public async Task GetProfileDataAsync(ProfileDataRequestContext context)
      {
          var emailClaim = context.Subject.FindFirst(ClaimTypes.Email);
          if (emailClaim != null)
          {
              context.IssuedClaims.Add(emailClaim);
          }
          // 其他Claims处理逻辑...
      }
      
  • 验证客户端的Scope请求
    C#客户端必须请求包含email权限的Scope,Identity Server才会把这个Claim放进令牌。检查客户端的OpenID Connect配置,确保Scope中添加了"email":

    services.AddAuthentication(options =>
    {
        // 其他配置...
    })
    .AddOpenIdConnect(options =>
    {
        // 其他配置...
        options.Scope.Add("openid");
        options.Scope.Add("email"); // 必须添加该Scope
    });
    
  • 检查客户端的Claims解析规则
    ASP.NET Core认证库可能对JWT中的Claims做映射或过滤,要确保客户端正确解析email字段:

    • 开启从UserInfo端点获取Claims:options.GetClaimsFromUserInfoEndpoint = true;
    • 手动映射email字段到标准Claim类型:
      options.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
      
    • 检查TokenValidationParameters,避免设置会过滤Claims的规则,比如仅保留必要的验证项如ValidateLifetime。
  • 确认Identity Server的令牌签发设置
    如果使用id_token,检查客户端配置的AlwaysIncludeUserClaimsInIdToken是否设为true(默认id_token不会包含所有用户Claims);如果使用access_token,要确保对应Scope配置了IncludeAllClaimsForUser = true,或者客户端允许通过浏览器获取access_token。

内容的提问来源于stack exchange,提问作者levis84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:57:25