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

内嵌于Angular父应用iFrame的Angular子应用Azure AD免二次登录实现咨询

需求可实现性确认

该需求完全可以实现,无需用户在子应用中二次输入账号密码完成登录。

完整实现步骤

Azure 门户配置

  • 确认两个Angular应用对应的应用注册都归属同一个Azure AD租户
  • 配置子应用的信任父应用规则:进入子应用的应用注册页,依次点击「管理」→「公开API」→「已知客户端应用」,添加父应用的Client ID后保存,该配置会告知Azure AD父应用的有效登录态可被子应用复用
  • 开启iframe鉴权支持:分别进入两个应用的应用注册页,点击「管理」→「身份验证」→找到单页应用对应的配置块,勾选「允许在iframe中加载身份验证响应」选项后保存,解决Azure AD鉴权页面被iframe拦截的问题
  • 可选配置:如果两个应用需要访问同一套后端API,给两个应用配置完全相同的API权限,避免后续Token权限校验失败

注意:如果两个应用部署在不同的一级域名下,Chrome、Edge等现代浏览器会默认拦截Azure AD下发的第三方Cookie,导致静默鉴权失败。建议将两个应用部署在同一个父域名下,仅子域名有区别(比如父应用app1.xxx.com、子应用app2.xxx.com),即可规避该问题。

代码调整

两个应用均使用MSAL.js v2及以上版本可获得最好的兼容性,仅需要调整少量参数即可:

  • 两个应用的MSAL初始化参数中的authority必须完全一致,统一使用租户级授权地址,格式为https://login.microsoftonline.com/{你的租户ID},不要使用common或者其他不同的授权地址
  • 子应用的MSAL登录请求配置中,将prompt参数设置为none,MSAL会优先尝试通过静默方式获取Token,不会触发重定向或者弹出登录窗口
  • 父应用完成登录流程、成功获取到Token之后,再加载嵌套子应用的iframe,避免子应用早于父应用发起鉴权请求导致失败
常见问题解答

是否仅通过Azure配置即可实现免登?

不能,必须配合上述的少量代码参数调整。Azure配置仅完成了两个应用之间的信任关系声明,子应用还需要通过调整MSAL参数触发静默鉴权逻辑,才能复用父应用的登录态。

父子应用获取的Token是否一致?

不一致,两者的Token是相互独立的:

  • Token的受众(aud字段)和应用的Client ID绑定,两个应用的Client ID不同,所以生成的id_token、access_token都不相同
  • 两个Token中携带的用户身份信息、租户信息是完全一致的
  • 只要两个应用都申请了相同的后端API权限,两个Token都可以正常通过后端的权限校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:15:05