Reactjs OpenID连接/节点/反应

Reactjs OpenID连接/节点/反应,reactjs,express,authentication,oauth-2.0,openid-connect,Reactjs,Express,Authentication,Oauth 2.0,Openid Connect,有很多例子说明如何实现OpenID连接身份验证。在节点中-代码授予(+客户端密码)。 有很多例子说明了如何使用PKCE在React(SPA)-代码授予中实现OpenID 即使我知道PKCE是相当安全的,但是我觉得仅仅在客户端进行身份验证很糟糕。 每个React SPA都有后端(至少应该托管在某个地方) 我想让服务器端在节点(Express)中安全地保存客户端密码,并使用Identity server和 对前端做出反应 正如我已经说过的,有很多用于身份验证的“带有模板引擎的节点(Express)”

有很多例子说明如何实现OpenID连接身份验证。在节点中-代码授予(+客户端密码)。 有很多例子说明了如何使用PKCE在React(SPA)-代码授予中实现OpenID

即使我知道PKCE是相当安全的,但是我觉得仅仅在客户端进行身份验证很糟糕。 每个React SPA都有后端(至少应该托管在某个地方)

我想让服务器端在节点(Express)中安全地保存客户端密码,并使用Identity server和 对前端做出反应

正如我已经说过的,有很多用于身份验证的“带有模板引擎的节点(Express)”示例。 但我想使用React作为“模板引擎”

因此,我正在寻求全面和正确的实施。与此同时,我找不到它。
有谁能帮我找到一个例子吗?

不过,您需要在SPA/浏览器中提供一些实际的保护,两个常见的选项是:

  • 插件完成繁重的工作,这样您就不用自己编写太多安全代码了。该库在接受令牌之前运行了大量严格的安全检查

  • 使用代理解决方案,使您的水疗中心得到一块饼干。 对于水疗中心来说,这更像是一个自主开发的解决方案,而不是基于标准的解决方案

方案1的矿产资源

用于选项2

  • 您可以使用服务器端,并遵循它的指导

不过,您需要在SPA/浏览器中提供一些实际保护,两个常见选项是:

  • 插件完成繁重的工作,这样您就不用自己编写太多安全代码了。该库在接受令牌之前运行了大量严格的安全检查

  • 使用代理解决方案,使您的水疗中心得到一块饼干。 对于水疗中心来说,这更像是一个自主开发的解决方案,而不是基于标准的解决方案

方案1的矿产资源

用于选项2

  • 您可以使用服务器端,并遵循它的指导

我在互联网上找到了两个解决方案

第一个:

  • 在前端,显示第三方应用程序的登录弹出窗口
  • (仍在前端)获取第三方应用程序在>同意登录后返回的身份验证令牌
  • (是的,仍然是前端)将该令牌作为>请求主体的一部分发送到后端。(我喜欢用水滴,但那只是我自己。)
  • 在后端,验证令牌
  • 如果令牌是可信的,您将在verification>响应中接收用户(至少我们将使用Passport.js)
  • 将用户数据保存到数据库中
  • 将JWT令牌返回到前端。您对该令牌所做的操作超出了>本教程的范围,但它可能应该用于验证每个登录>用户的操作
  • 非常好的解释,使用github工作示例 它只用于社交身份验证,但我认为做一些更一般的东西或者至少添加我的OpenID连接身份验证是没有问题的。提供者

    第二个示例:

    这种方法使用socket.io。非常有趣

    p.S. 因此,我需要找出哪个解决方案更安全,以及是否存在任何安全漏洞。
    这不是一件容易的事。很遗憾,我的问题没有标准流程。我可以找到1000个理由,说明为什么最好在后端完成所有繁重的工作,而不要依赖OIDC客户端库。第一个原因是我的老板:)

    我在互联网上找到了两个解决方案

    第一个:

  • 在前端,显示第三方应用程序的登录弹出窗口
  • (仍在前端)获取第三方应用程序在>同意登录后返回的身份验证令牌
  • (是的,仍然是前端)将该令牌作为>请求主体的一部分发送到后端。(我喜欢用水滴,但那只是我自己。)
  • 在后端,验证令牌
  • 如果令牌是可信的,您将在verification>响应中接收用户(至少我们将使用Passport.js)
  • 将用户数据保存到数据库中
  • 将JWT令牌返回到前端。您对该令牌所做的操作超出了>本教程的范围,但它可能应该用于验证每个登录>用户的操作
  • 非常好的解释,使用github工作示例 它只用于社交身份验证,但我认为做一些更一般的东西或者至少添加我的OpenID连接身份验证是没有问题的。提供者

    第二个示例:

    这种方法使用socket.io。非常有趣

    p.S. 因此,我需要找出哪个解决方案更安全,以及是否存在任何安全漏洞。
    这不是一件容易的事。很遗憾,我的问题没有标准流程。我可以找到1000个理由,说明为什么最好在后端完成所有繁重的工作,而不要依赖OIDC客户端库。第一个原因是我的老板:)

    选项1-是的,我知道OIDC客户端库,我使用它。但是,我不希望客户端(浏览器)承担繁重的工作。选项2——看起来很有趣。非常感谢。这似乎是我所需要的,但它不是微不足道的,我需要更多的研究从我这边。但是没关系。我可以处理它。选项1-是的,我知道OIDC客户端库,并且我使用它。但是,我不希望客户端(浏览器)承担繁重的工作。选项2——看起来很有趣。非常感谢。这似乎是我所需要的,但它不是微不足道的,我需要更多的研究从我这边。但是没关系。我能应付。