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

Microsoft ID Platform:React SPA+ASP.NET Core API的最优授权码流选型

问题解答

1. 适配的授权码流方案

你需要在AAD中注册两个独立应用:一个SPA类型应用,一个Web API类型应用,采用「SPA授权码流(带PKCE) + Web API承载令牌验证」的组合方案,具体逻辑如下:

  • SPA端:使用授权码流(PKCE)向Microsoft Identity平台请求令牌,因为SPA是公共客户端(无法安全存储客户端密钥),PKCE是必须的安全机制。请求时要指定目标API的访问范围,拿到的Access Token专门用于调用后端API,ID Token用于前端识别用户身份。
  • API端:配置为接受Microsoft Identity平台颁发的承载令牌,验证令牌的签名、受众(Audience)、过期时间等合法性即可(ASP.NET Core的Microsoft Identity中间件会自动完成这部分验证)。
  • SPA与API的通信:SPA调用API时,在HTTP请求头中携带Authorization: Bearer {access_token},API端通过中间件自动解析并验证令牌,确认用户身份后,再用令牌中的用户唯一标识(比如oid或sub)关联你自有数据库中的权限数据,执行自定义授权逻辑。

这种方案不存在两个独立认证上下文的问题——令牌由同一个AAD实例颁发,API验证令牌后就能确认用户是经过AAD认证的合法用户,再结合你自己的权限体系做控制。

2. 是否需要配置AAD范围

是的,必须至少配置一个API范围,原因如下:

  • AAD颁发的Access Token需要明确的受众(Audience)和范围(Scope),否则API无法识别这个令牌是给自己的,会验证失败。你可以配置一个最基础的范围(比如access_as_user),不需要赋予具体权限含义,仅作为令牌与API绑定的标识。
  • 你的自定义授权逻辑可以完全独立于AAD范围:API验证令牌合法后,提取用户的唯一标识(比如oid),去自有数据库查询该用户的角色、权限,再通过业务逻辑过滤数据。AAD范围在这里仅起到“让令牌与API绑定”的作用,不参与你实际的权限判断。

关键配置要点

  • 在AAD的Web API应用中添加一个范围,比如api://{api-client-id}/access_as_user,启用“管理员和用户均可同意”。
  • 在SPA应用的API权限中添加这个范围,并授予同意。
  • SPA请求令牌时,将这个范围加入请求参数,确保拿到的Access Token的aud字段匹配API的客户端ID,scp字段包含该范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:35:23