在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操作即可:- 获取用户名(对应
nameClaim):var userName = User.Identity.Name; - 获取用户唯一ID(Azure AD B2C中对应
subClaim):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
相关产品推荐
相关产品推荐

