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

基于ASP.NET Core的B2C登录场景下,Web API如何获取用户Claims?

实现ASP.NET Core Web API获取B2C登录用户的Claims

前端(Web应用)处理

  • 用户通过B2C登录后,从B2C获取Access Token(优先用Access Token而非ID Token,更适配API场景),可临时存储在内存中(比localStorage更安全)。
  • 调用API时,在请求头里携带令牌,格式为Bearer {access_token},示例JS代码:
async function callUserApi() {
  // 从B2C SDK或存储逻辑中获取有效Access Token
  const accessToken = await getValidAccessToken();
  const response = await fetch('/api/user/claims', {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${accessToken}`
    }
  });
  const userClaims = await response.json();
  // 处理返回的Claims数据
}

后端(Web API)配置

首先在Program.cs中配置B2C身份验证,确保API能验证令牌合法性:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://你的B2C租户.b2clogin.com/你的B2C租户.onmicrosoft.com/你的登录策略名/v2.0/";
        options.Audience = "你的API在B2C注册的客户端ID";
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "https://你的B2C租户.b2clogin.com/你的租户ID/v2.0/"
        };
    });

// 启用身份验证与授权中间件
app.UseAuthentication();
app.UseAuthorization();

在API控制器中获取Claims

  • 在需要验证身份的控制器或Action上添加[Authorize]特性,拦截未授权请求。
  • 直接通过HttpContext.User.Claims读取用户Claims,示例代码:
[ApiController]
[Route("api/user")]
[Authorize]
public class UserController : ControllerBase
{
    [HttpGet("claims")]
    public IActionResult GetUserClaims()
    {
        var userClaims = User.Claims.Select(c => new { 类型 = c.Type, 值 = c.Value });
        return Ok(userClaims);
    }
}

关键注意事项

  • 确保前端请求的API范围与B2C中配置的API权限一致,否则令牌会被API拒绝。
  • 令牌过期后,前端需调用B2C的刷新令牌接口获取新Access Token,避免请求失败。
  • 敏感Claims的处理逻辑务必放在API端,不要在前端暴露敏感数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:05:21