[英]Azure B2C: KMSI feature does not work with custom policy
我们的 SPA 使用 Azure B2C 和 MSAL (React) 进行用户身份验证。 还有其他要求,因此我们使用自定义策略而不是预定义的用户流。 但我很难按照这些说明实施保持登录 (KMSI) 功能。
Phone_Email_Base.xml
和SignUpOrSignInWithPhoneOrEmail.xml
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Phone-Email">
添加了<Item Key="setting.enableRememberMe">True</Item>
条目<UserJourneyBehaviors>
<SingleSignOn Scope="Tenant" KeepAliveInDays="30" />
<SessionExpiryType>Absolute</SessionExpiryType>
<SessionExpiryInSeconds>1200</SessionExpiryInSeconds>
<ScriptExecution>Allow</ScriptExecution>
</UserJourneyBehaviors>
"@azure/msal-browser": "^2.14.2", "@azure/msal-react": "^1.0.0"
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.