将Keycloak登录合并到SPA中

汤玛士

目前,我们正在评估Keycloak作为我们的SSO解决方案,虽然它可以用于基于servlet的应用程序,但是关于我们的(基于React的)SPA仍然存在一个问题。

设计师想要的是:例如,我们有一个电子邮件客户端spa。用户正在写电子邮件的过程中,但随后分心了。当他返回时,SSO会话已经超时,需要重新登录。现在,应该为用户提供一个登录表单,登录后应该可以发送仍在SPA本地存储中的电子邮件(即,重新登录而无需重新启动SPA或丢失数据)。

AFAIK Keycloak不提供身份验证API(有充分的理由),并使用重定向到登录页面并返回到应用程序的方式(据我了解,对于移动应用程序,将使用系统浏览器)。如果我没记错的话,重定向将意味着SPA然后重新初始化,因此数据将丢失。

因此,这里的问题是:我们的设计师希望Keycloak可以做什么?

如果是,将如何进行?直接发布到Keycloak使用的登录URL似乎是一个坏主意,因为令牌可能无法正确存储,并且可能存在同源策略问题。是否可以在iframe或弹出窗口中进行操作?

Geofox编码

对于回到这个问题的人,

我认为最好坚持SPA的oAuth2 / OpenId Connect的最佳做法,该做法目前是PKCE的“授权代码流”。

https://oauth.net/2/pkce/

https://tools.ietf.org/html/draft-ietf-oauth-security-topics-13

这里的正常流程需要完全重定向到身份验证服务器,然后再返回,以便您的应用程序将完全重新初始化。或者,您可以使用静默模式中已经提到的Sébastien等check-sso。

https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/oidc/javascript-adapter.adoc

您可以配置无提示check-sso选项。启用此功能后,您的浏览器将不会完全重定向到{project_name}服务器并返回到您的应用程序,但是此操作将在隐藏的iframe中执行,因此您的应用程序资源仅需要通过以下方式加载和解析一次:应用程式初始化时的浏览器,而不是从{project_name}重新导向回您的应用程式后的浏览器。这对于SPA(单页应用程序)特别有用。

这样,登录将在iframe中进行,并且该应用仅初始化一次并应保留状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章