使用 SAML 和身份提供者的微服务身份验证
Posted
技术标签:
【中文标题】使用 SAML 和身份提供者的微服务身份验证【英文标题】:micro services authentication using SAML and Identity Provider 【发布时间】:2016-10-24 07:24:09 【问题描述】:我们正在为我们的领域开发微服务。
我们需要使用 SAML 保护微服务。
我通读了 SAML 文档,发现有一个身份提供者,我们已经向其注册了我们的应用程序 (SP),而且我们应该连接到 IdP 以进行身份验证。我知道我们需要在他们之间建立信任或联盟。
我尝试使用提供的示例应用程序使用 Spring Security SAML 扩展和 SSOCircle.com 作为 IdP 进行身份验证。我能够成功地进行相应的身份验证。
我的问题是,在微服务架构中,我们有多个服务。由于它不是一个整体,我们不能只将一个服务作为 SP 添加到 IdP。
这意味着我所说的每个微服务,员工、部门、销售等也应该作为单独的 SP 应用程序添加到 IdP 中。
我不确定这是否有意义或是否真的可行。
如果有人从事过类似的架构/开发,请提供您对从身份验证角度处理微服务安全性的最佳方法的想法。
谢谢, 技术员
【问题讨论】:
【参考方案1】:两种方法:
-
如您所说,将每个微服务配置为 SP,每个 SP 与 IdP 对话以进行 SAML 身份验证。
如果每个微服务的用户、组和角色集与其他微服务不同,这是合适的。
可能有多个 SP,需要管理员维护。
将所有微服务整合并配置到您域中的单个 SP(可能使用反向代理 Web 服务器或访问管理器),并且该单个 SP 与 IdP 对话以进行 SAML 身份验证。
如果所有微服务都具有相同的用户、组和角色集,这是合适的。
管理员可能只需要维护一个 SP。
【讨论】:
感谢您的回复。是的,所有微服务都有相同的用户集,但可能有不同的组和角色。我也觉得拥有一个单一的 SP 应该是前进的方向。但是,我不确定我们如何使用 IdP 为与域相关的所有服务配置单个 SP。我正在使用 public IdP ssocircle.com 通过上传来添加服务元数据,该元数据在服务启动时生成。您能否告诉我如何将服务分组到单个域中并将其添加到 IdP。 简单的解决方案是,使用反向代理 Web 服务器(如 Apache 反向代理或 nginx)。 (1)。在反向代理的配置或策略文件中添加所有微服务端点。 (2)。集成反向代理(使用 SAML 模块)和您的 SAML-SP 服务器进行通话。 (3)。现在所有服务都受到保护,并将通过 IdP 的 SAML 身份验证。有关如何实现上述方法,请进一步参考反向代理 Web 服务器(如 Apache 反向代理或 Nginx)。以上是关于使用 SAML 和身份提供者的微服务身份验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 SAML 2.0 作为 SSO 的外部身份提供者的身份服务器 4
使用 Spring Security 在一个应用程序中结合数据库和 SAML 身份验证
要求使用相同的 IDP 重新进行身份验证 - Spring SAML
如何创建 SAMLAuthenticationToken 并将其发送到 SAML 身份验证提供程序