我有一个SPA应用程序(VueJS),它使用Azure B2C和MSAL来验证用户 . 身份验证工作正常 .
但是不起作用的是,用户没有保持登录状态 .
只要我使用该应用程序,一切正常 . 但是,当我第二天启动我的应用程序时,我必须重新登录(或者只是重新选择我想要使用的帐户),但我希望拥有相同的使用体验,例如天蓝色的门户网站 . 我可以在一周后重新访问门户网站,而不必重新登录 .
我如何使用MSAL实现此行为?这个库甚至可以实现吗?该库使用implicid流程 .
我可以使用另一个图书馆吗?
2 回答
通常,基于浏览器的应用程序不应该让用户登录,因为身份提供者处的活动(例如密码更改或重置)可能使持久会话无效并且应该强制进行交互式登录 .
您应该考虑已为custom policies启用的the "keep me signed in (KMSI)" capability .
答案之前......
我认为你可能需要通过查看网络跟踪工具来扩展正在发生的事情 . 此外,正如另一个答案所说,KMSI将有所帮助,但可能不是这里唯一的问题 . 我建议查看是否正在设置cookie(检查下方),您的应用程序是否成功获取ID,访问令牌,并在后续身份验证请求中检查此状态 .
基础知识
使用MSAL.js的SSO是绝对可能的,并且应该在没有太多配置的情况下发生 . 对于实现身份验证的基于浏览器的应用程序中的某些背景,实现SSO是cookie /会话的一个因素,而不是令牌/令牌管理 .
这是如何运作的
当您的单页应用程序将用户重定向到Azure AD B2C登录页面并且最终用户成功登录时,Azure AD将在该最终用户的浏览器中设置cookie . 然后,当您的应用想要为用户获取ID令牌或访问令牌时(假设初始登录中的现有签名已过期),MSAL可以在后台启动静默i帧,重定向到Azure AD具有特殊查询参数(
prompt=none
)的站点,并使用先前设置的cookie .