Azure AD B2C结合SAML实现免登录页认证的方法咨询
解决方案:利用Azure AD B2C跨协议SSO会话实现免登
可以实现,不需要自行开发登录页,核心是利用Azure AD B2C的跨协议单点登录(SSO)会话,而非直接使用OIDC访问令牌。以下是具体实现逻辑和步骤:
核心原理
Azure AD B2C的SSO会话是跨OIDC和SAML协议共享的:当用户通过门户应用的OIDC自定义策略完成登录后,B2C会在用户浏览器中设置全局SSO Cookie(如x-ms-cpim-sso)。此时访问QlikSense的SAML认证URL时,B2C会自动识别已有有效SSO会话,跳过登录页直接生成SAML断言并完成认证流程。
具体操作步骤
确认SSO会话共享配置
- 确保门户应用的OIDC自定义策略与QlikSense的SAML自定义策略属于同一Azure AD B2C租户,且使用相同的用户池。
- 检查自定义策略中的会话管理配置:在
<UserJourney>的<OrchestrationStep>中,确保<SessionManagement>节点引用的是默认的SSO会话提供者(例如SM-AAD),默认配置无需修改即可实现跨协议SSO。
触发免登流程
用户在门户应用登录成功后,直接将用户重定向到你提供的QlikSense SAML认证URL:https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/idp&RelayState=https://<domain>/<PORTAL>B2C检测到浏览器中的SSO Cookie后,会自动跳过登录页面,完成SAML断言生成并跳转至QlikSense完成认证。
验证与排查
- 使用浏览器开发者工具查看
b2clogin.com域下的Cookie,确认x-ms-cpim-sso等SSO相关Cookie存在且未过期。 - 若仍出现登录页,检查自定义策略中的
<RelyingParty>节点是否禁用了SSO(默认未禁用),或是否存在会话超时、用户池不一致等问题。
备选方案(若SSO会话受限)
如果因业务限制无法依赖浏览器SSO Cookie,可以通过门户应用后端实现静默获取SAML断言:
- 利用门户应用持有的用户刷新令牌,调用B2C令牌端点获取新的ID令牌。
- 后端构造SAML认证请求,携带ID令牌以静默方式调用B2C的SAML自定义策略端点,获取SAML断言后传递给QlikSense。
- 此方案需要后端处理认证请求,复杂度较高,优先推荐SSO会话方式。
内容的提问来源于stack exchange,提问作者Aldo Inácio da Silva
相关产品推荐
相关产品推荐

