Azure AD B2C集成外部IdP实现跨第三方应用SSO可行性咨询
结论
这个身份认证流程完全可以实现,不需要做复杂的定制开发,只要配置符合要求就能达到点击链接直接免登第三方应用的效果。
核心实现原理
你当前的联邦登录链路本身就已经为SSO打好了基础:
- 当用户在你的SPA上选择外部IdP登录时,Azure AD B2C只是作为联邦身份代理转发认证请求,用户最终是在外部IdP的域名页面完成账号密码校验,校验通过后外部IdP会在自己的域名下写入持久化的会话Cookie,之后才会把认证结果回传给B2C,由B2C签发你SPA用的登录令牌。
- 你要跳转的第三方应用本身就是由同一个外部IdP提供认证服务,用户点击链接访问第三方应用时,第三方应用会自动发起认证请求跳转到外部IdP,外部IdP检测到自身域名下已经存在该用户的有效会话,就会直接给第三方应用签发认证凭证,全程不会弹出登录框要求用户重复输入信息,自动完成SSO。
落地注意事项
- 确认外部IdP的租户一致性:你在B2C中配置的外部IdP实例,必须和第三方应用对接的是同一个外部IdP租户,不能是同一厂商下相互隔离的不同租户。
- 确认外部IdP的会话策略没有做应用隔离:部分IdP支持配置会话仅对指定应用生效,如果开了这类限制,需要把你的SPA(通过B2C联邦对接的应用实体)和第三方应用同时加入该IdP的会话信任列表。
- 不需要额外做跨域Cookie适配:因为外部IdP的会话Cookie存在IdP自身域名下,认证过程是用户浏览器直接请求IdP域名,不存在跨域读取Cookie的问题,哪怕你的SPA和第三方应用根域名完全不同也不影响。
- 可以提前做登录态判断优化体验:从B2C签发的ID Token中读取
idp字段,判断当前登录用户是不是通过对应外部IdP登录的:如果是本地B2C账号登录的用户,点击链接时可以提前提示需要切换外部IdP账号才能免登访问第三方应用;如果是对应外部IdP登录的用户直接跳转即可。 - 不要做多余的令牌透传:别尝试把你SPA持有的B2C访问令牌、ID令牌直接传给第三方应用当登录凭证,第三方应用的信任主体是外部IdP,不会认可B2C签发的令牌,正常跳转让第三方应用走自己的标准认证流程就行。
内容的提问来源于stack exchange,提问作者Mukunda Pasumarthi
相关产品推荐
相关产品推荐

