Azure B2C:在联合身份提供程序上注销期间阻止的 iframe 问题
Azure B2C: Issues with blocked iframe during signout on Federated Identity Provider
我们在使用带有自定义策略的 Azure B2C 完成注销流程时遇到问题。
我们在 Azure AD 中创建了一个示例企业应用程序,并在 B2C 环境中的自定义策略中将其设置为联合身份提供者,除了注销问题外,一切都按预期进行。
注销流程。
- 第一步运行良好,session 在 B2C 身份提供商上被清除。
- 我们可以在网络选项卡中看到在联合身份提供者上调用了正确的端点,但此请求被阻止
(net::ERR_BLOCKED_BY_RESPONSE)
然后我检查了响应header并发现X-Frame-Options: DENY
.我不确定,但对我来说,请求似乎是从 iframe 发出的,但被阻止了。
- 用户被重定向回应用的 post_logout_redirect_url
解决方法是将 end_session_endpoint 作为 post_logout_redirect_url:
https://domain.b2clogin.com/domain.onmicrosoft.com/signin/oauth2/v2.0/logout?post_logout_redirect_uri=https://login.microsoftonline.com/guid/oauth2/v2.0/logout?post_logout_redirect_url=https://app.com/callback.html
而且效果很好。
这是技术简介
<TechnicalProfile Id="Company-OpenIdConnect">
<DisplayName>Company</DisplayName>
<Description>Company</Description>
<Protocol Name="OpenIdConnect"/>
<Metadata>
<Item Key="METADATA">https://login.microsoftonline.com/tenantID/v2.0/.well-known/openid-configuration</Item>
<Item Key="client_id">guid</Item>
<Item Key="response_types">code</Item>
<Item Key="scope">openid profile</Item>
<Item Key="response_mode">form_post</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="UsePolicyInRedirectUri">false</Item>
</Metadata>
...
<UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
</TechnicalProfile>
这是预料之中的,大多数 IdP 不允许在用于登录或注销的 iframe 中呈现。 Azure AD 也不允许在 iframe 中呈现,因此注销未完成。
您的解决方法会导致整页重定向,这会起作用,但用户体验可能会很糟糕。
The sign-out clears the user's single sign-on state with Azure AD B2C, but it might not sign the user out of their social identity provider session.
我们在使用带有自定义策略的 Azure B2C 完成注销流程时遇到问题。
我们在 Azure AD 中创建了一个示例企业应用程序,并在 B2C 环境中的自定义策略中将其设置为联合身份提供者,除了注销问题外,一切都按预期进行。
注销流程。
- 第一步运行良好,session 在 B2C 身份提供商上被清除。
- 我们可以在网络选项卡中看到在联合身份提供者上调用了正确的端点,但此请求被阻止
(net::ERR_BLOCKED_BY_RESPONSE)
然后我检查了响应header并发现X-Frame-Options: DENY
.我不确定,但对我来说,请求似乎是从 iframe 发出的,但被阻止了。 - 用户被重定向回应用的 post_logout_redirect_url
解决方法是将 end_session_endpoint 作为 post_logout_redirect_url:
https://domain.b2clogin.com/domain.onmicrosoft.com/signin/oauth2/v2.0/logout?post_logout_redirect_uri=https://login.microsoftonline.com/guid/oauth2/v2.0/logout?post_logout_redirect_url=https://app.com/callback.html
而且效果很好。
这是技术简介
<TechnicalProfile Id="Company-OpenIdConnect">
<DisplayName>Company</DisplayName>
<Description>Company</Description>
<Protocol Name="OpenIdConnect"/>
<Metadata>
<Item Key="METADATA">https://login.microsoftonline.com/tenantID/v2.0/.well-known/openid-configuration</Item>
<Item Key="client_id">guid</Item>
<Item Key="response_types">code</Item>
<Item Key="scope">openid profile</Item>
<Item Key="response_mode">form_post</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="UsePolicyInRedirectUri">false</Item>
</Metadata>
...
<UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
</TechnicalProfile>
这是预料之中的,大多数 IdP 不允许在用于登录或注销的 iframe 中呈现。 Azure AD 也不允许在 iframe 中呈现,因此注销未完成。
您的解决方法会导致整页重定向,这会起作用,但用户体验可能会很糟糕。
The sign-out clears the user's single sign-on state with Azure AD B2C, but it might not sign the user out of their social identity provider session.