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

如何实现两个Azure应用间的无缝身份认证?

核心结论:不能直接复用应用1的Access Token

应用1生成的Access Token的aud(受众)字段是应用1的Client ID,应用2的后端API在验证Token时会检查aud是否匹配自身的Client ID,不匹配则会直接拒绝请求。所以这个Token无法直接用于访问应用2的资源。

实现跨应用无缝跳转的可行方案

1. 基于Azure AD已有会话的静默登录(推荐前端场景)

用户登录应用1后,Azure AD会在浏览器中保留会话Cookie。当用户从应用1跳转到应用2的前端时,应用2的前端可以利用这个已有会话,通过MSAL库的acquireTokenSilent方法,静默获取应用2专属的Access Token,全程无需用户手动登录:

  • 应用2的前端初始化MSAL实例时,配置自身的Client ID、租户ID、redirect URI等参数;
  • 当页面加载完成后,调用acquireTokenSilent,传入应用2所需的API scope(比如api://{应用2ClientID}/access_as_user);
  • Azure AD会在后台验证已有会话,直接返回应用2的Access Token,不会弹出登录界面。

2. 依赖应用2的受保护路由自动触发SSO

如果应用2的前端路由已经配置了Azure AD身份验证拦截(比如ASP.NET Core应用使用Microsoft.Identity.Web中间件,或单页应用用MSAL的路由守卫),用户从应用1跳转至应用2的受保护页面时:

  • 浏览器会携带Azure AD的会话Cookie,应用2的验证逻辑会自动跳转至Azure AD;
  • Azure AD检测到已有有效会话,会直接重定向回应用2并携带授权码,应用2后续完成Token获取流程,全程用户无感知。

3. 应用级权限调用(适用于后端互访场景)

如果是应用1的后端需要调用应用2的后端API,而非前端跳转,可以给应用1配置Azure AD的应用权限:

  • 在Azure AD中,给应用1添加对应用2 API的应用级权限(而非委托权限);
  • 应用1的后端使用Client Credentials Flow获取应用级Token,这个Token可以直接调用应用2的API,无需用户参与。但此方案仅适用于后端服务间的调用,不适合前端用户跳转的场景。
关键注意事项
  • 两个应用必须处于同一Azure AD租户下,Azure AD的SSO会话是租户范围的;
  • 确保应用2的redirect URI配置与实际部署地址完全一致,否则静默登录会因跨域或配置不匹配失败;
  • 使用同一版本的MSAL库(如MSAL.js v2/v3),避免不同版本间的会话兼容性问题;
  • 如果用户会话过期或需要多因素认证(MFA),仍会触发登录提示,这是正常的安全机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:25:18