使用 Angular、node.js 和身份提供商进行 SAML 身份验证

2024-03-22

我想使用 SAML2 实现 SSO。 但我不知道如何让它与分布式系统一起工作,其中每个实例都在自己的服务器上独立运行。该环境由三个实例组成:

  • 实例#1:有角度的前端
  • 实例#2:node.js 后端(使用express.js + Passport)
  • 实例 #3:SAML 实例(身份提供商)

问题是,如果前端调用受保护的后端路由,最好的方法是什么? 哪些操作顺序可以被视为良好实践?

目前我脑子里有这样的行为:

  1. 前端向受保护的后端路由发送请求
  2. 由于用户未经过身份验证,服务器会发起重定向到身份提供商提供的 SSO 页面。
  3. 在那里输入凭据
  4. 用户通过 saml 实例进行身份验证,并将请求发送回服务器。
  5. 现在用户已通过身份验证,服务器将带有所请求资源的响应发送回客户端。

但只要我思考这个序列,我就意识到这是行不通的。 这是因为前端是自己的实例,并且独立于后端。 如果您有单独的前端实例,则由 Passport 发起的到 SSO 页面的重定向将不起作用。 如果您直接使用浏览器调用受保护的路由,则它会起作用,因为这样您就只有两个通信伙伴(服务提供商和身份提供商)而不是三个。 但这里的情况并非如此。

感谢致敬

Philipp


我在之前的工作中用这个逻辑做了类似的事情:

  1. 在 Angular 中实现一个登录页面(获取凭据的简单表单),然后在后端调用登录服务。
  2. 该后端登录服务应该根据身份提供商验证前端提供的凭据(我确信他们会为您提供一个可以注入这些参数的网址)。
  3. 验证身份后,调用后端的身份验证服务为该用户生成令牌(Passport JS 应该完成这项工作),然后将此令牌发送回前端。
  4. 在前端,实现一个守卫,它应该处理令牌/将用户凭证设置到本地存储中......
  5. 在前端,还实现一个拦截器,该拦截器会在每个 XHR 标头中注入此令牌,或者在令牌缺失或过期时将用户重定向到登录表单。
  6. 在后端,逻辑将是经典的(在发回数据之前从 XHR 标头验证令牌有效性/如果验证失败则告诉前端登录)。

通过这种逻辑,您将使前端远离身份提供者并与后端保持一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Angular、node.js 和身份提供商进行 SAML 身份验证 的相关文章

随机推荐

  • 通过公式而不是脚本在单元格中使用 Google Sheets 文件名?

    有没有FORMULA这将在单元格中显示文件的名称 我找到了可以做到这一点的脚本 可以显示工作表名称的公式 但没有找到可以显示文件名的公式 如果我必须诉诸剧本 那就这样吧 但如果可能的话我想使用公式 如果以前有人问过这个问题 请指出该帖子 我
  • Object.values() 的替代版本

    我正在寻找替代版本Object values 功能 As 此处描述 https developer mozilla org en US docs Web JavaScript Reference Global Objects Object
  • 以数组形式遍历不平衡二叉树

    不平衡 或非堆 二叉树可以使用数组表示 如下所示 array 1 2 null 3 4 5 6 null 7 8 null 1 2 null 3 4 5 6 null 7 8 null 如何使用给定的数组进行树遍历 更具体地说 如何计算父母
  • 如何在颤振中的当前位置创建圆圈

    我正在开发 flutter 项目 我必须在谷歌地图上的当前位置上画一个圆圈 有人知道吗 我想要这样的颤振 提前致谢 此功能现已在 google maps flutter 包中提供 https pub dev documentation go
  • 使用facet_wrap和geom_segment删除不必要的y轴点

    我使用以下命令将 y 轴点映射到 x 轴geom segment 然后使用facet wrap将数据分成两个图 然而 y 轴点都显示在这两个图上 我怎样才能只拥有与每个相关的必要的 y 轴点facet wrap 示例代码 dat lt st
  • 无法调整图表边距

    我创建了一个图表 但它在 Y 轴和图表边框之间有一个左边距 我怎样才能让它变成0 是否可以在图表和边框之间定义 5px 的统一边距 左 上 右 下 我的图表代码如下 Chart chart new Chart AntiAliasing An
  • 使用 ObjectInputStream 读取文件时出现 EOFException [重复]

    这个问题在这里已经有答案了 我基本上有一个类似的问题 如此处所述 Java中读取objectinputstream时出现EOF异常 https stackoverflow com q 2308128 1065197 但我找不到干净代码的答案
  • jQuery 1.4.1 中缺少 JSON stringify?

    显然 jQuery 能够将给定的对象或字符串解码为 JSON 对象 但是 我有一个 JS 对象 需要将其 POST 回服务器 并且我在 jQuery 中找不到包装 JSON stringify 函数的实用程序 Chrome Safari 4
  • 在运行时改变对象的行为

    如何在运行时更改对象的行为 使用C 我举一个简单的例子 我有课Operator包含一个方法operate 让我们假设它看起来像这样 double operate double a double b return 0 0 用户将给出一些输入值
  • ASP.NET MVC 模型与表单元素名称中的破折号绑定

    我一直在互联网上搜索 试图找到一种方法 将表单元素中的破折号容纳到 MVC 2 3 甚至 4 中 ASP NET 控制器的默认模型绑定行为中 作为一名前端开发人员 我更喜欢 CSS 中的破折号 而不是驼峰命名法或下划线 在我的标记中 我想要
  • 客户无需离开您的网站即可使用 Paypal 进行付款

    我的客户给我这个链接https www paypal com webapps mpp compare business products https www paypal com webapps mpp compare business p
  • 使用任务时出现意外的线程中止异常。为什么?

    我有一个在应用程序域中运行的控制台应用程序 应用程序域由自定义 Windows 服务启动 该应用程序使用父任务来启动多个有效的子任务 当计时器寻找新工作时 在任何给定时间都可能有许多父任务和子任务一起运行 所有父任务的句柄位于任务列表中 s
  • 我必须实现哪些方法才能重新排列 UITableView 行?

    对于使用名为 rows 的字符串 NSMutableArray 的简单示例 我必须在表控制器中实现什么才能移动 tableView 行并将更改反映在我的数组中 我们在这里做繁重的工作 void tableView UITableView t
  • Flutter中JSON序列化和反序列化为对象

    由于 Flutter 从其 SDK 中删除了 dart 镜像 因此不再可能使用 dartson 等库进行 JSON 对象序列化 反序列化 不过 我读到built value 是实现类似目的的另一种方法 我找不到任何关于如何实现它的好例子 因
  • 所有小部件上的 Flutter 工具提示

    有没有办法设置tooltip on a Text widget new Text Some content tooltip Displays a message to you 这是行不通的 然而它确实有效 因为这里提到 https docs
  • 使用 GNU Make 将多行变量输出到文件

    我很难编写在文件中输出多行变量的 makefile 规则 这是我的代码 define VAR1 dev d 755 endef define VAR2 test d 777 test2 d 777 endef VARS VAR1 VARS
  • 组件的 Angular 2 指令会覆盖 ng-content?

    我有一个名为 ButtonComponent 的组件 import Component from angular2 core Component selector btn template div class btn div
  • 将 subprocess.Popen (shell=True) 与 Windows 文件夹一起使用

    我目前正在看Popen自动压缩和存储文档 对于压缩部分 我想到了以下Python行 subprocess Popen WinRAR exe a r c 03 Notes AllTexts txt shell True 我不断收到错误消息 因
  • Linkedin API - 按关键字搜索帖子

    我尝试通过 Linkedin API for PHP 将我的 Web 应用程序与 Linkedin 连接 有什么方法可以使用这个通过关键字搜索人们的出版物吗 如果可以的话 我还没有找到方法 我认为他们没有这种本机 所以他们可以避免报废 您可
  • 使用 Angular、node.js 和身份提供商进行 SAML 身份验证

    我想使用 SAML2 实现 SSO 但我不知道如何让它与分布式系统一起工作 其中每个实例都在自己的服务器上独立运行 该环境由三个实例组成 实例 1 有角度的前端 实例 2 node js 后端 使用express js Passport 实