[英]SAML IdP SLO (single logout) with Azure AD B2C is failing
我们有一个带有自定义策略的 Azure AD B2C 实例,以允许用户使用来自外部 SAML 身份提供商的凭据进行签名,配置基于此 Microsoft Doc: https://docs.microsoft.com/en-us/azure/活动目录-b2c/identity-provider-generic-saml?tabs=windows&pivots=b2c-custom-policy 。
除单次注销 (SLO) 请求外,自定义策略均有效。 有趣的是,在 Chrome 中,SLO 请求有效,但在 Firefox 和 Safari 中失败。
在注销流程期间,浏览器(本示例中使用 Firefox)接收来自 Azure AD B2C 的带有 SAML 注销请求的负载。 然后将有效负载加载到 iframe 中,以便可以将 SAML 注销请求发布到 SAML IdP。 在下图中客户端脚本的第 41 行中,您可以看到 iframe 在方法 frameLoader 中附加到 DOM,这就是请求失败的地方。
这是调用 frameLoader 的异常的堆栈跟踪。
我认为这个问题与 cookies 和跨站点请求伪造 (CSRF) 有关,所以我为 Azure AD B2C 配置了一个自定义域,但这并没有解决问题。 我还认为它与 cookie 中的 SameSite 属性有关,所以我尝试编辑其中一个,但这并没有解决问题。
有没有人遇到过这个问题并知道如何解决?
在您的用例中这可能不是问题,但是通过 HTTP 重定向发送时 Azure LogoutResponses 中有一个功能。 以小写形式编码。 您显示的示例确实表明小写大写差异 %3a 而不是 %3A 在另一个图像中。
解决方法是让 SAML 库在大多数情况下使用 REDIRECT_URI。 作为一种技巧,您可以用小写字符替换编码中的字母。
如果这是您的问题,则问题是签名无法匹配,因为 a 和 A 不相等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.