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

Azure AD中注册可被SPA访问的Web API应用及认证流程咨询

Azure AD配置方案与认证流程指南

你的初始方案问题点

你提到的用单个Web应用注册同时兼顾SPA和后端资源的思路不合理,因为Azure AD里SPA(公开客户端)和Web API(受保护资源)的安全模型完全不同,必须分开注册才能符合最佳实践。另外app://clientID/scopes是原生移动应用的重定向格式,SPA并不适用。

正确的Azure AD配置步骤

  1. 注册SPA客户端

    • 在Azure AD中创建「单页应用(SPA)」类型的应用注册
    • 设置重定向URI为你的SPA前端地址(生产环境必须是HTTPS,本地开发可用http://localhost:3000这类地址)
    • 无需配置客户端密钥,因为SPA是公开客户端,无法安全存储密钥
  2. 注册Web API后端

    • 创建「Web API」类型的应用注册
    • 进入「公开API」页面,添加自定义作用域(比如api://{你的Web API Client ID}/access_as_user),设置用户或管理员同意权限
    • 记录下这个作用域,后续SPA要用到
  3. 给SPA授权访问Web API

    • 在SPA的应用注册页面,进入「API权限」,添加刚才Web API的自定义作用域
    • 点击「授予管理员同意」(如果是租户内应用,这样普通用户无需手动同意)

推荐的认证流程:授权码流(PKCE增强)

这是微软官方推荐的SPA认证流程,核心原因是它解决了SPA无法安全存储密钥的问题,比旧的隐式流更安全:

  • 流程步骤:
    1. SPA生成随机的code_verifier和对应的code_challenge,跳转到Azure AD授权端点,携带client_id、redirect_uri、scope(Web API的自定义作用域)、code_challenge等参数
    2. 用户完成登录后,Azure AD将授权码返回给SPA的重定向URI
    3. SPA携带授权码、code_verifier、client_id等参数,请求Azure AD令牌端点,获取访问令牌(用于调用Web API)和ID令牌(用于前端获取用户信息)
    4. 后续SPA每次调用Web API,都在请求头里携带Authorization: Bearer {访问令牌}

服务器端管理要点

  • 必须每次验证令牌:Web API收到请求时,必须验证访问令牌的有效性,包括:
    • 签名是否由Azure AD签发
    • 令牌的受众(aud)是否匹配当前Web API的Client ID
    • 令牌包含的作用域(scp)是否符合接口所需权限
    • 令牌是否未过期
      可以用微软官方的Microsoft.Identity.Web(.NET)、msal-node(Node.js)等库自动处理验证逻辑,不用手动实现
  • 不需要设置服务器端会话:SPA是无状态客户端,Web API应该保持无状态设计,所有身份信息都通过访问令牌传递,无需在服务器存储会话。如果需要持久化用户状态,可在前端存储非敏感信息(如用户ID、角色),敏感数据绝对不能存在前端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:25:21