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

时间:2017-12-11 21:19:08

标签: angularjs single-sign-on keycloak

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

  • 网站包含一些静态(CMS)和动态部分,一些单页应用程序,所有内容都适用于域spa.com
  • REST API,提供任何动态功能(用户配置文件),并托管在api.com上,并要求SSO令牌工作。
  • SSO服务器托管在sso.com

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

  • 做重定向舞蹈来获取令牌
  • 不允许用户使用注册表

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

var cookie = getCookie('KEYCLOAK_SESSION');
if (cookie) {
    data.loggedIn = true;
    data.session = cookie;
}

问题是我不能依赖这个cookie来检查用户是否已登录,因为cookie有30天的到期日期,这比实际的Keycloak会话持续时间长,比方说15分钟。

当用户通过身份验证时,将设置此cookie,并且不会在每次令牌更新时刷新。我不明白它的目的和这面旗帜的目的。

我也在考虑依赖本地存储并保持刷新&通过检查超时或尝试刷新访问令牌,在那里访问令牌以确定用户是否已登录。但是......这也不可靠,因为用户可能已经使用其他应用程序进行了身份验证。

要为问题添加更多上下文...我的一个SPA应用程序是注册向导,它使用REST API注册用户并接收login_hint作为回报。此login_hint可用作SSO重定向中的通配符以传递质询并立即登录。

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

0 个答案:

没有答案