如何在Keycloak JS适配器中确定用户是否使用SSO登录?

Mic*_*udy 5 single-sign-on angularjs keycloak

为了介绍当前的设置,我有3个组件:

  • 具有一些静态(CMS)和动态部分,几个单页应用程序的网站,所有内容都可以在域上运行spa.com
  • REST API,可提供任何动态功能(用户配置文件),并且托管在api.comSSO令牌上,并且需要SSO令牌才能起作用。
  • SSO服务器托管在sso.com域下

我想在SPA中确定用户是否具有活动的SSO会话,因此,当我登录但没有令牌时,我可以:

  • 进行重定向舞蹈以获取令牌
  • 不允许用户使用注册表

我正在使用Keycloak JS适配器,该适配器使用iframe机制并检查KEYCLOAK_SESSIONcookie,并通过一些标志与主机窗口进行通信:

var cookie = getCookie('KEYCLOAK_SESSION');
if (cookie) {
    data.loggedIn = true;
    data.session = cookie;
}
Run Code Online (Sandbox Code Playgroud)

问题是我不能依靠此cookie来检查用户是否已登录,因为cookie的有效期为30天,这比实际的Keycloak会话持续的时间(例如15分钟)还长。

当用户通过身份验证时会设置此cookie,并且不会在每次令牌更新时刷新。我不明白那是这个标志的目的和目的。

我还在考虑依靠本地存储并在其中保留刷新和访问令牌来确定用户是否已登录,方法是检查超时或尝试刷新访问令牌。但是,这也不可靠,因为用户可能已经使用其他应用程序进行了身份验证。

为问题增加更多的上下文...我的SPA应用程序之一是注册向导,该向导使用REST API来注册用户并得到login_hint回报。这login_hint可以被用作SSO重定向通配符来通过挑战并立即登录。

但是,如果某个其他用户已经登录,我们将获得该其他用户的返回会话,而不是由于used而应登录的用户login_hint