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

在ASP.NET Core Web API中如何获取JWT令牌的Claims数据?

在ASP.NET Core Web API中获取Azure AD B2C JWT Claims的最佳方式
  • 无需手动解析令牌,直接用User属性
    既然你的Azure AD B2C认证已经正常运行,ASP.NET Core的认证中间件已经自动完成了JWT的验证、解码,并且将所有Claims加载到了ControllerBase的User属性里。完全不用手动去读取Request.Authorization、去除Bearer 前缀再解码——这是冗余且容易出错的做法。

  • 常用获取Claims的便捷方式
    直接在控制器方法里通过User操作即可:

    • 获取用户名(对应name Claim):var userName = User.Identity.Name;
    • 获取用户唯一ID(Azure AD B2C中对应sub Claim):var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); 或者直接写Claim类型字符串:User.FindFirstValue("sub");
    • 获取用户邮箱:var email = User.FindFirstValue(ClaimTypes.Email);
    • 遍历所有Claims:
      var allClaims = User.Claims.Select(c => new { c.Type, c.Value });
      
  • 修改你的示例代码(加入Claims逻辑)
    你可以直接在GetUsers方法中集成Claims的获取,比如用来做数据权限过滤:

    [HttpGet]
    public async Task<IActionResult> GetUsers([FromBody] SearchSortFilter Options)
    {
        try
        {
            // 获取当前请求用户的核心Claims
            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
            var userEmail = User.FindFirstValue(ClaimTypes.Email);
            
            // 可将Claims传递给仓储层,实现基于用户的数据过滤
            var users = await userRepository.GetUsers(Options, userId);
            
            return Ok(users);
        } 
        catch (Exception ex)
        {
            return StatusCode(500, ex.Message);
        }
    }
    
  • 注意事项
    确保你的Azure AD B2C应用配置中,已经将需要的Claims(比如email、name等)添加到令牌的返回列表里,否则User属性中不会包含这些Claims。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:15:28