B2C:ADFS 的 AcquireTokenSilent 失败,适用于本地帐户
B2C: AcquireTokenSilent fails for ADFS, works for local accounts
我们在 B2C 登录流程中设置了 AD FS as an identity provider。交互式登录工作正常,但每当我们在单页应用程序 (SPA) 中使用 MSAL-JS 执行 acquireTokenSilent
时,我们都会收到错误消息:
Refused to display 'https://mytenant.b2clogin.com...' in a frame because it set 'X-Frame-Options' to 'deny'.
这只发生在隐式流中。使用授权代码授予的应用程序工作正常。本地帐户适用于这两种流程。通过阅读文档,这不应该发生,因为我应该有一个会话。
Note that non-interactive logins can be performed via iFrame due to prior session level security that has been established.
我该如何解决这个错误?
仔细检查我的政策和文档后,错误变得很明显。出于某种原因,我们的 SAML 技术配置文件政策中包含以下代码:
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop"/>
所以基本上用户有一个与 B2C 的会话,一个与 ADFS 的会话,但 B2C 没有与 ADFS 的会话。
一旦我们使用 documentation 中指示的 SamlSSOSessionProvider
,一切就开始工作了。
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-idp" />
....
<ClaimsProvider>
<DisplayName>Session Management</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SM-Saml-idp">
<DisplayName>Session Management Provider</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="IncludeSessionIndex">false</Item>
<Item Key="RegisterServiceProviders">false</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
在进一步调查时,我们发现文档最初包含相同的错误,这就是我们最初获得代码的方式。文档是 fixed one month ago!
我们在 B2C 登录流程中设置了 AD FS as an identity provider。交互式登录工作正常,但每当我们在单页应用程序 (SPA) 中使用 MSAL-JS 执行 acquireTokenSilent
时,我们都会收到错误消息:
Refused to display 'https://mytenant.b2clogin.com...' in a frame because it set 'X-Frame-Options' to 'deny'.
这只发生在隐式流中。使用授权代码授予的应用程序工作正常。本地帐户适用于这两种流程。通过阅读文档,这不应该发生,因为我应该有一个会话。
Note that non-interactive logins can be performed via iFrame due to prior session level security that has been established.
我该如何解决这个错误?
仔细检查我的政策和文档后,错误变得很明显。出于某种原因,我们的 SAML 技术配置文件政策中包含以下代码:
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop"/>
所以基本上用户有一个与 B2C 的会话,一个与 ADFS 的会话,但 B2C 没有与 ADFS 的会话。
一旦我们使用 documentation 中指示的 SamlSSOSessionProvider
,一切就开始工作了。
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-idp" />
....
<ClaimsProvider>
<DisplayName>Session Management</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SM-Saml-idp">
<DisplayName>Session Management Provider</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="IncludeSessionIndex">false</Item>
<Item Key="RegisterServiceProviders">false</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
在进一步调查时,我们发现文档最初包含相同的错误,这就是我们最初获得代码的方式。文档是 fixed one month ago!