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

如何从Azure AD B2C获取无需用户身份验证的SPA应用API访问令牌

无用户登录场景下通过MSAL.js获取Azure AD B2C访问令牌的实现方案

SPA属于无法安全存储客户端密钥的公开客户端,不能直接使用标准客户端凭据流获取令牌,以下两种方案可复用现有Azure AD B2C能力实现需求:

方案一:客户端凭据流+后端中转(推荐,安全性更高)

该方案利用现有ASP.NET Core后端作为中转,完全规避前端密钥泄露风险,适配你现有的技术栈。

Azure AD B2C端配置

  • 租户内注册一个单独的Web类型应用注册,不需要配置重定向URI
  • 为该应用创建客户端密钥,妥善保存密钥值
  • 为该应用授予后端API的应用权限(不是委托权限),并完成管理员同意授权

ASP.NET Core后端实现

  • 新增一个匿名访问的令牌获取端点,后端内部调用客户端凭据流拿令牌返回给前端:
[AllowAnonymous]
[HttpGet("anonymous-token")]
[ResponseCache(Duration = 3300)] // 缓存55分钟,和令牌有效期匹配
public async Task<IActionResult> GetAnonymousToken([FromServices] ITokenAcquisition tokenAcquisition)
{
    var scopes = new[] { "https://你的租户名.onmicrosoft.com/你的API应用ID/.default" };
    var accessToken = await tokenAcquisition.GetAccessTokenForAppAsync(scopes);
    return Ok(new { AccessToken = accessToken, ExpiresAt = DateTimeOffset.UtcNow.AddMinutes(55).ToUnixTimeSeconds() });
}
  • 可根据业务需要对该端点增加限流、来源校验等防护规则,避免被恶意调用

前端(Nuxt/Vue+MSAL.js)实现

  • 匿名页面初始化时直接调用上述/api/anonymous-token端点获取令牌,缓存到sessionStorage中
  • 调用其他匿名业务API时,将令牌放到Authorization请求头即可,不需要调用MSAL.js的登录相关接口

方案二:AAD B2C匿名用户流(纯前端实现)

该方案不需要修改后端逻辑,直接通过MSAL.js无交互获取令牌,但需要你的AAD B2C租户为标准定价层。

Azure AD B2C端配置

  • 新建「注册并登录」类型的用户流,选择推荐版本
  • 在标识提供程序配置中开启匿名访问选项
  • 配置用户流的API权限,添加后端API的对应委托权限,开启隐式授权流的访问令牌返回选项
  • 确保原有SPA应用注册已被允许使用该用户流

前端(MSAL.js)实现

直接调用MSAL.js的静默获取令牌接口,指定匿名用户流的权威地址即可,不需要跳转登录:

const { instance } = useMsal();
const tokenRequest = {
  scopes: ["https://你的租户名.onmicrosoft.com/你的API应用ID/匿名访问权限名"],
  authority: "https://你的租户名.b2clogin.com/你的租户名.onmicrosoft.com/B2C_1_你的匿名用户流名称",
  prompt: "none" // 关键参数:不触发登录交互
};

try {
  const tokenRes = await instance.acquireTokenSilent(tokenRequest);
  const accessToken = tokenRes.accessToken;
  // 后续业务API调用使用该令牌即可
} catch (err) {
  // 静默获取失败时调用跳转接口,匿名用户流不会展示登录页,会直接返回令牌
  await instance.acquireTokenRedirect(tokenRequest);
}

后端验证适配

两种方案的令牌都符合JWT标准,你现有ASP.NET Core的JWT验证中间件不需要大幅改动,只需要:

  • 将匿名用户流/客户端凭据流的签发地址添加到JWT验证的有效发行者列表
  • 匿名API端点保留[AllowAnonymous]属性的同时,可新增自定义策略校验令牌的iss、aud等核心声明,确保令牌由你自己的租户签发,安全性远高于普通API Key方案

内容的提问来源于stack exchange,提问作者Julian.Net

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:45:02