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

调用Azure B2C获取AccessToken时遇AADB2C99067错误求助

问题分析与解决方案

核心原因

你遇到的AADB2C99067错误,本质是Azure AD B2C的安全限制:Client Credentials Grant Flow仅支持机密客户端(Confidential Client),而你的Angular应用属于公共客户端(Public Client)——SPA类应用默认归类为公共客户端,这类客户端无法安全存储client_secret,因此B2C直接拒绝了请求。

Postman能成功是因为它作为测试工具模拟了机密客户端的调用逻辑,但Angular前端代码会直接暴露client_secret,既不符合安全规范,也违反B2C的客户端类型限制。

正确解决方案(推荐)

调整架构,不要在前端直接调用Client Credentials流,通过后端中间层处理:

  1. 新建机密客户端应用注册
    • 在Azure AD B2C中创建新的应用注册,类型选择Web(这类属于机密客户端)。
    • 为该客户端添加目标API的权限,并授予管理员同意。
  2. 后端处理Token获取
    • 在你的后端服务(或新增轻量中间层)中,使用这个机密客户端的client_id和client_secret调用Client Credentials流获取AccessToken。
    • 后端用获取到的AccessToken调用受保护的目标API。
  3. 前端调用后端接口
    • Angular的匿名页面直接调用你的后端接口,由后端完成Token获取和API转发逻辑。

为什么不能在前端直接处理?

前端代码中的client_secret会完全暴露给用户,任何人都能通过浏览器开发者工具获取密钥,进而冒充你的应用调用API,带来严重安全风险——这也是B2C禁止公共客户端使用Client Credentials流的核心原因。

额外检查点

  • 确认Postman中使用的是机密客户端的client_id和client_secret,而非Angular应用的公共客户端ID。
  • 确保机密客户端已被授予目标API的相应权限,且完成了管理员同意操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:36:20