我想使用 SAML2 实现 SSO。
但我不知道如何让它与分布式系统一起工作,其中每个实例都在自己的服务器上独立运行。该环境由三个实例组成:
- 实例#1:有角度的前端
- 实例#2:node.js 后端(使用express.js + Passport)
- 实例 #3:SAML 实例(身份提供商)
问题是,如果前端调用受保护的后端路由,最好的方法是什么?
哪些操作顺序可以被视为良好实践?
目前我脑子里有这样的行为:
- 前端向受保护的后端路由发送请求
- 由于用户未经过身份验证,服务器会发起重定向到身份提供商提供的 SSO 页面。
- 在那里输入凭据
- 用户通过 saml 实例进行身份验证,并将请求发送回服务器。
- 现在用户已通过身份验证,服务器将带有所请求资源的响应发送回客户端。
但只要我思考这个序列,我就意识到这是行不通的。
这是因为前端是自己的实例,并且独立于后端。
如果您有单独的前端实例,则由 Passport 发起的到 SSO 页面的重定向将不起作用。
如果您直接使用浏览器调用受保护的路由,则它会起作用,因为这样您就只有两个通信伙伴(服务提供商和身份提供商)而不是三个。
但这里的情况并非如此。
感谢致敬
Philipp
我在之前的工作中用这个逻辑做了类似的事情:
- 在 Angular 中实现一个登录页面(获取凭据的简单表单),然后在后端调用登录服务。
- 该后端登录服务应该根据身份提供商验证前端提供的凭据(我确信他们会为您提供一个可以注入这些参数的网址)。
- 验证身份后,调用后端的身份验证服务为该用户生成令牌(Passport JS 应该完成这项工作),然后将此令牌发送回前端。
- 在前端,实现一个守卫,它应该处理令牌/将用户凭证设置到本地存储中......
- 在前端,还实现一个拦截器,该拦截器会在每个 XHR 标头中注入此令牌,或者在令牌缺失或过期时将用户重定向到登录表单。
- 在后端,逻辑将是经典的(在发回数据之前从 XHR 标头验证令牌有效性/如果验证失败则告诉前端登录)。
通过这种逻辑,您将使前端远离身份提供者并与后端保持一致。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)