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

Azure AD B2C结合ASP.NET Web API实现鉴权及访问MS Graph API方案咨询

问题根因

你拿到的用于后端鉴权的令牌是Azure AD B2C专门签发、受众为你的ASP.NET后端API的访问令牌,仅可用于你自有服务的鉴权,不符合MS Graph API的令牌校验规则,因此会返回Invalid x5t claim报错;同时B2C确实不支持OAuth2.0的on-behalf-of流,无法直接将用户令牌交换为Graph API的访问令牌。

保留B2C作为身份提供方的认证流实现方案
  • 基础用户信息直接从令牌声明提取:在Azure AD B2C的用户流/自定义策略配置中,将你需要的用户属性(邮箱、显示名、用户ID、联系方式等)配置为需要返回的声明,这些属性会直接嵌入前端返回的id令牌和access令牌中,后端可以直接从HttpContext.User.Claims中读取,无需调用额外接口。
  • 自定义用户属性获取:如果需要获取令牌未携带的扩展用户属性,有两种可选方案:
    1. 将自定义属性配置为B2C用户的扩展属性,同样添加到令牌返回声明中,直接从请求上下文提取
    2. 后端使用服务到服务的客户端凭据流调用Graph API获取对应用户的全量数据
Graph API调用及Key Vault相关需求解决方案
  • 合法调用Graph API的实现方式:
    1. 在你Azure租户的根AD下注册一个应用注册,为该应用授予Graph API的应用权限(而非委托权限),比如User.Read.All、User.ReadWrite.All等你需要的权限,由租户管理员完成权限授权。
    2. 你的ASP.NET后端使用该应用的客户端ID、客户端密钥/证书,通过客户端凭据流申请受众为Graph API的访问令牌,调用时不要使用/me端点,改为调用/users/{用户objectId}接口,其中用户objectId从当前请求的B2C令牌声明中直接提取即可。
  • Key Vault用户自有密钥存储实现:
    不要直接给终端用户授予Key Vault或Graph API的操作权限,所有相关操作都由你的后端作为中间层代理:后端使用托管身份获取Key Vault的操作权限,收到用户操作请求时先校验当前用户的身份和权限,校验通过后由后端代为执行Key Vault的读写操作,不需要用户直接调用相关接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:07