gpt4 book ai didi

reactjs - 使用 jwt 响应多个子域身份验证

转载 作者:行者123 更新时间:2023-12-04 04:12:33 25 4
gpt4 key购买 nike

我们希望使用相同的用户数据库和 Rest API 开发几个不同的服务(React 应用程序)。
有些用户可能有权访问 APP 1,有些用户可以访问 APP 2,有些用户可以访问两者,这取决于他们的角色。

  • 我们决定采用多个子域应用程序的方法。
  • 我们希望 SSO 只有一个页面/应用程序来验证所有应用程序,而不是每个应用程序的本地登录组件。在我们的后端使用 JWT 机制。

  • 结构体:

    enter image description here

    授权流程:

    enter image description here

    此流程中有两个主要问题,分别标记为 1 和 2:
  • 假设我转到登录应用程序并登录,从后端获取 accestoken。
    我如何将 token 交付给 app1.company.com?应该使用 url 参数中的 token 来响应登录 APP 重定向吗?
  • 本地存储是子域范围的。
  • iframe 与 Safari 有问题。
  • 我现在不想将 jwt 保存在 cookie 中,因为 Flask REST 可以为非浏览器零售客户提供服务。


  • 假设用户想要访问 app2。如果我们无法与 iframe 或任何其他方法共享来自 app1 的 token ,则应将此应用重定向到登录并再次以 app1 身份登录该过程,这对我们来说很好。
    但这真的是这样吗?如果 token 不再无效并且我们从后端收到错误,我们是否应该重定向到另一个子域中的登录应用程序(嵌入我们要在登录成功后返回的网址)?
  • 我可以只使用第 3 方 Open id 连接服务吗?
  • 我应该考虑使用微前端来将所有“应用程序”放在同一个域上吗?
  • 以“Attlassian”为例如何处理这个过程?


  • 我缺少什么,解决此流程的最佳方法是什么?

    最佳答案

    Lets say i go to the login app and log in, getting accestoken from the backend. How do i deliver the token to app1.company.com?



    login.company.com 将 token 作为 URL 中的参数传递不是问题,因为站点可以通过验证数字签名或使用中央身份验证域中的特定端点来验证 token 的真实性。这就是 openid/oauth2 使用“隐式”流程的方式,尽管它们也允许将 token 作为 POST 发送,或使用两步流程(“authorization_code”流程)

    Lets say the user want to go to app2. if we aren't able to share the token from app1 with iframes or any other method, then this app should be redirected to login and make the process again as app1, which is fine for us. But is this really the way?



    您可以使用内部 iframe 在域之间共享 token ,但在您的情况下,我建议每个域使用自己的 token 。

    if token is invalid anymore and we get Error from backend, should we redirect to the login app in the other subdomain (embed the url we wanna go back to after login success)?



    是的,在您绘图的编号 2) 中,只需从 app2.company.com 重定向到 login.company.com 并遵循与 1) 中相同的流程。您将需要 login.company.com 上的某种类型的 cookie 以避免再次向用户请求凭据

    Can i just use 3rd party Open id connect service?



    是的,您可以使用外部 OpenIdConnect 服务,或在 login.company.com 上部署 OpenIdConnect 服务器,例如 IdentityServer 或 KeyCloak

    Should i consider microfrontends approcah to make the all the "apps" on the same domain?



    没有必要拥有中央身份验证域

    How "Attlassian" as an example handles this process?



    我不知道 Attlassian 是如何做到的,但目前大多数 Web 服务都支持 OpenIdConnect

    关于reactjs - 使用 jwt 响应多个子域身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61483579/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com