在React-Redux应用程序上实现SSO

问题描述:

我试图在使用Keycloak作为外部身份提供程序的React-Redux应用程序上实现SSO。如果用户未通过身份验证,并且身份验证成功后使用access_token访问另一个REST API微服务中的受保护资源,则意图是重定向到IdP的登录页面。在React-Redux应用程序上实现SSO

我试图使用Keycloak的NodeJS适配器(https://keycloak.gitbooks.io/documentation/securing_apps/topics/oidc/nodejs-adapter.html),它能够将我重定向到IdP以进行登录,并且我可以获取access_token,但是这一切都发生在快速会话中并使用MemoryStore。我想知道这样好吗?在快速存储中保存JWT并在进行API调用时从商店中检索它们?

或者我应该尝试在Redux的商店中保存身份验证状态(JWT令牌)吗?与会话cookie相比会更好吗?会话cookie可能更安全,但会涉及每次访问商店,对吗?

最重要的是,我如何才能实现Redux商店拥有JWT的方法?

任何帮助将不胜感激。

在此先感谢。

+0

可能的[React-Redux应用程序中的OpenID Connect SSO]重复(https://*.com/questions/44958133/openid-connect-sso-in-react-redux-app) – Leon

对于所有那些有兴趣谁,我设法实现它以下列方式:从keycloak服务器

    • 负载Keycloak.js(Keycloak的JS适配器)初始化Keycloak脚本使用配置客户端的参数。
    • 创建Reducer以在主React组件即将呈现时通过调用Keycloak脚本来获取JWT令牌。
    • 将令牌添加到状态。

    无论如何,我们现在认为从服务器动态加载Keycloak.js并不是一个好主意,最重要的是,这将使我们的应用程序与Keycloak紧密结合。我们现在正在寻找更通用的OIDC实施。

    至于存储令牌,我们认为Redux商店可能不是最适合JWT的地方。我们正在考虑在localStorage中储存代币。

    希望这可以帮助别人!

  • +0

    看看redux- oidc或实际完成称为oidc-client的低级库 - 包括JWT处理(无论您想要哪种存储!)和Redux立即可以存储更新。已经回答了您的重复问题以及... – Leon

    +0

    @Leon,尽管redux-oidc和oidc-client库看起来相当不错,我都尝试过它们,但我的用例与这些提供的有些不同。我的应用中没有登录(或未经身份验证的页面)组件。默认情况下,我们的目标是保护应用程序的所有路由,因此像CallbackComponent/redirect_uri这些东西是我们无法做到的。 现在,我在react-router的_onEnter_中初始化OIDC适配器,并获得可用的东西,但现在我试图让授权代码流在SPA中工作以保护我的客户端秘密! – Hawkes

    +0

    我也没有“登陆页面”,并且“CallbackComponent”在所有其他路线(是,在SPA中)受到保护......任何命中将得到认证,CallbackComponent只是正确设置localStorage/cookies(并检查用户到期等),以避免每次都触碰auth服务器。所有的作品在这里都很好;) – Leon