node.js - 如何使用 NodeJS 进行单点登录?

标签 node.js single-sign-on

我有多个网络应用程序跨多个域运行。我想实现单点登录,以便用户登录一次即可访问所有应用。

我应该如何实现这个?所有应用都使用 NodeJS 后端。

欢迎提供正确方向的一般指示。

最佳答案

由于您的应用程序在不同的域上运行,因此您无法在客户端计算机上运行的那些应用程序之间共享 cookie 以验证用户。所以不知何故,信息需要在服务器端共享。

我想到的最简单的解决方案是:

  1. 为所有服务器建立一个共享 session 。

  2. 有一个特定的身份验证域,并在需要身份验证时将用户重定向到那里。在那里对用户进行身份验证,并根据需要设置 session cookie 或 token 。

  3. 每当您的任何应用需要身份验证时,将其重定向到身份验证域。身份验证 cookie 将提供给身份验证域以及引用域。在看到您已经通过验证后,身份验证服务器可以将您重定向到具有正确 sessionID 的原始应用程序,该 sessionID 将被设置为该域的 cookie。

  4. 如果未通过身份验证,将要求用户在身份验证服务器上进行身份验证,然后进行重定向。

  5. 只需稍作改动,您就可以使用 token 实现此目的,而无需共享 session 。

在实现之前正确验证状态。机制中的更多状态意味着更多的错误和可能的攻击机会。

考虑将您的应用移至同一子域。如果身份验证机制相同,那么每个人都知道所有应用程序都属于同一家公司。人们也更容易记住同一域上的各个子域,而不是记住所有不同的域。

关于node.js - 如何使用 NodeJS 进行单点登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43631581/

相关文章:

javascript - 我正在使用node.js并为学生开发一种协作工具,我想在我的node项目中使用fabric js,但无法正常工作

java - IVR 与厂商IVR 系统集成 |单点登录实现

azure - 可以和不能使用 B2C 进行身份验证的注册应用程序之间有什么区别?

Azure SSO 错误 : AADSTS50020 when prompt=consent and user is a live account

java - OAuth : Authenticating Android user on google app engine using Facebook SSO

single-sign-on - 使用 Cloud Foundry CLI 进行 Swisscom Passeport 两步登录

node.js - 有没有办法使用 React 和 Observables (rx.js) 将文件上传到 Node.js?

javascript - Node.js : graceful restarts and server uptime, 方法?

javascript - 如何通过代理或作为中间件来操作 socket.io 数据?

node.js - ( Node :7016) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated