繁体   English   中英

Azure B2C:KMSI 功能不适用于自定义策略

[英]Azure B2C: KMSI feature does not work with custom policy

我们的 SPA 使用 Azure B2C 和 MSAL (React) 进行用户身份验证。 还有其他要求,因此我们使用自定义策略而不是预定义的用户流。 但我很难按照这些说明实施保持登录 (KMSI) 功能。

  1. 我使用了入门包中的自定义策略: Phone_Email_Base.xmlSignUpOrSignInWithPhoneOrEmail.xml
  2. <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Phone-Email">添加了<Item Key="setting.enableRememberMe">True</Item>条目
  3. 更新了依赖方策略文件:
<UserJourneyBehaviors>
  <SingleSignOn Scope="Tenant" KeepAliveInDays="30" />
  <SessionExpiryType>Absolute</SessionExpiryType>
  <SessionExpiryInSeconds>1200</SessionExpiryInSeconds>
  <ScriptExecution>Allow</ScriptExecution>
</UserJourneyBehaviors>
  1. 按照此在我的 index.tsx 中设置 MSAL 实例。 库版本: "@azure/msal-browser": "^2.14.2", "@azure/msal-react": "^1.0.0"
  2. 试图获取访问令牌:
msalInstance
   .acquireTokenSilent(accessTokenRequest)
   .then((response) => {
      // use response.accessToken here
      ...
    })
   .catch((e) => {
      console.error(e);
      if (e instanceof InteractionRequiredAuthError) {
         instance.acquireTokenRedirect(accessTokenRequest);
      }
   });

问题是 MSAL 无法在用户登录 24 小时后以静默方式检索访问令牌(即刷新令牌过期后),需要用户重新登录。

为确保我的应用程序代码正常,我尝试使用启用了 KMSI 功能的预定义用户流程(结合B2C_1_SignUpSignIn )。 在这种情况下,我的应用程序能够在 24 小时后静默获取访问令牌。 因此 KMSI 与用户流完美配合,但不适用于自定义策略。

几天来浏览文档和示例,但仍然找不到任何线索在这里还需要做什么。 任何帮助,将不胜感激。

当 acquireTokenSilent() 失败时,MSAL 将调用 ssoSilent()。 这将启动隐藏的 iframe 以尝试使用基于 cookie 的 SSO 获取令牌。

当失败时,最终错误将返回。 您必须捕获此错误并调用 acquireTokenRedirect()。 现在,如果您的技术资料的 session 设置正确,并且存在有效的 session cookie,您将获得 SSO。

https://learn.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-reference-sso

如果您确实看到用户输入提示,则您的 session 设置不适合该特定技术配置文件。 这就是 ssoSilent() 失败的真正原因。

您的问题不是 KMSI。 为了证明这一点,删除 KMSI 配置,登录到您的应用程序,从 LocalStorage 中删除 MSAL 对象,强制更新令牌。 即使没有 KMSI,您也会在登录几分钟后重现您描述的问题。

好吧,最终证明这个解决方案确实有效。 仍然不确定为什么在应用自定义策略后的前 24 小时后失败。 因此,我被迫在前 24 小时后重新登录,但当其他 24 小时过去后,我的应用程序无需用户提供凭据即可获得新的访问令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM