为了介绍我目前的设置,我有3个组件:
spa.com
。 api.com
上,并要求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
而应该登录的用户。