【问题标题】:B2C: AcquireTokenSilent fails for ADFS, works for local accountsB2C:AcquireTokenSilent 对于 ADFS 失败,适用于本地帐户
【发布时间】:2020-04-02 08:09:47
【问题描述】:

我们在 B2C 登录流程中设置了 AD FS as an identity provider。交互式登录工作得很好,但是每当我们在单页应用程序 (SPA) 中使用 MSAL-JS 执行 acquireTokenSilent 时,我们都会收到错误:

拒绝在框架中显示“https://mytenant.b2clogin.com...”,因为它将“X-Frame-Options”设置为“拒绝”。

这只发生在隐式流中。使用授权代码授予的应用程序工作得很好。本地帐户适用于这两种流程。通过阅读文档,这不应该发生,因为我应该有一个会话。

https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/customize-http-security-headers-ad-fs#x-frame-options

请注意,由于已经建立了先前的会话级别安全性,因此可以通过 iFrame 执行非交互式登录。

我可以做些什么来修复这个错误?

【问题讨论】:

    标签: single-page-application azure-ad-b2c adfs identity-experience-framework


    【解决方案1】:

    在仔细检查了我的政策和文档后,错误变得很明显。出于某种原因,我们在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2016-12-14
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多