问题标签 [spring-security-saml2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
64 浏览

java - saml 集成 Ruby(IDP) 和 Java(SP)

我正在实施 saml SSO。在这个 IDP 是用 ruby​​ 编写的,SP 是用 java 编写的。对于 ruby​​,我们使用的是 saml_idp 和 ruby​​-saml gems。对于 java,我正在尝试使用 spring-security-saml-dsl。来自 SP 的 saml authrequest 格式如下

但这并没有被 IDP 接受。经过调查,我发现如果格式如下所示,IDP 允许

我如何使 spring-security-saml-dsl(java SP) 以“samlp”格式而不是“saml2p”发送?或者我如何让 saml_idp(ruby IDP) 也接受“saml2p”格式?

0 投票
1 回答
1490 浏览

spring-boot - 使用 Spring Security 在一个应用程序中结合数据库和 SAML 身份验证

我正在尝试使用spring security(spring-security-starter)在spring boot(2.2.4)应用程序中实现身份验证和授权。

用例:基于用户名,我想将用户重定向到特定的身份验证提供程序

  • 如果用户名以'mit.com'结尾使用数据库验证用户(我使用的是休眠)- 为此,我可以使用 spring 的 UserDetailService
  • 如果用户名以“einfochips.com”结尾,则使用 SAML 2.0 协议验证用户 - 使用 Okta、SSOCircle、OneLogin 等身份提供程序。

    我不知道该怎么做。我尝试使用自定义过滤器,但无法做到。

我浏览了很多文章,但无法做到这一点。

我编写了以下代码,仅使用 SAML 进行身份验证。它工作正常。将用户带到 okta idp 进行登录。

任何人都可以指导我,以便我可以配置为可以使用任何 IDP,如 okta、ssocircle、OneLogin 等。

0 投票
1 回答
97 浏览

spring-security - SAML 2 / spring-security 当前状态?

我试图弄清楚如何在我们现有的应用程序(作为 SP)中构建 SAML 支持。就目前而言,最新的方法似乎是在 spring-security-core 级别(当前版本 5.3.1)使用 SAML 支持。

但是,它的当前状态我无法理解如何开始,我什至无法弄清楚如何从 xml 导入 idp 元数据。看来我必须手动转换为相应的 RelyingPartyRegistration?

已停产的 spring-security-saml 扩展仍然可行吗?它似乎具有更完整的功能集,并且可以解析元数据 xml(这是我所期望的第一件事......)

在这个特定日期很难找到相关的信息

谢谢

0 投票
1 回答
427 浏览

java - JWT 身份验证回退到相同路径的 SAML2

我在我spring-security-saml2-service-provider的一个 Spring Boot 应用程序中使用身份验证,并且在另一个 Spring Boot 应用程序中使用自定义JwtAuthorizationFilter(通过 http Authentication 标头)。

他们俩都可以自己完美地工作。

现在我需要编写一个同时使用它们的 Spring Boot 应用程序。如果 JWT 令牌可用(身份验证标头),则使用JwtAuthorizationFilter,否则使用saml2Login.

SAML2配置如下所示:(没有过滤器,只有saml2Login

JWT配置如下所示:

我想我需要类似的东西,JwtOrSaml2AuthenticationFilter但不知道该怎么做。

0 投票
2 回答
1772 浏览

spring - Spring Security SAML2 多 IDP 配置

我正在尝试通过RelyingPartyRegistrationRepository使用 spring security 5.3 配置多个 idp 这是我的 application.yaml 配置

我的登录控制器定义如下:

问题 我的relyingParty 有提供程序的详细信息,但我认为myassertionConsumerServiceUrl默认为{baseUrl}/login/saml2/sso/{registrationId}并且my localEntityIdTemplate= {baseUrl}/saml2/service-provider-metadata/{registrationId}` 的事实导致了它的问题。如何在我的 yaml 文件中添加 sp 信息?还是我这样做完全错了?

截屏 在此处输入图像描述

0 投票
1 回答
296 浏览

spring - Spring Security SAML 重放攻击防范

如 OASIS 安全断言标记语言 (SAML)V2.0 的配置文件 ( https://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf ) 第 4.1 章所述。 4.5 服务提供者必须通过在断言未过期期间为已处理的断言保留缓存来防止重放攻击。

我知道 OpenSAML 通过提供安全策略和针对重放的缓存实现来支持防止重放攻击,但是我在 Spring SAML 的任何地方都找不到这些实现的用法。我希望 WebSSOProfileConsumer 能够提供这样的功能。谁能指出我在哪里(如果有的话)可以找到这种行为的正确方向?

0 投票
1 回答
1580 浏览

java - Spring Security SAML2 使用 G Suite 作为 Idp

我正在尝试使用 Spring Security (5.3.3.RELEASE) 在 Spring Boot 应用程序中处理 SAML2 身份验证。带有 SP 和 G Suite 的 Spring Boot 应用程序将是 IDP。

在我的 Maven pom.xml 文件中,我有:

在我的代码中,我有:

问题是我需要一个签名密钥,但是该行final Saml2X509Credential credential = new Saml2X509Credential(cert, Saml2X509CredentialType.SIGNING);会引发异常,因为您必须将 a 传递给PrivateKey该构造函数才能将其用于该SIGNING类型。但是,如果我使用该凭据进行验证,则应用程序将失败,并出现需要签名密钥的异常。

G Suite 只提供一个元数据 XML 文件(Spring Security 不支持)和一个.pem文件。我将文件中的所有文本复制.pem到上面的那个字符串中以生成 X509 证书。

在 Spring Security SAML 的文档中,它们显示 2 个证书,但 G Suite 仅提供 1 个。我应该从 .pem 文件生成 PrivateKey 吗?如果是这样,怎么做?

0 投票
0 回答
119 浏览

spring-boot - Spring Security SAML 正在抛出响应没有任何可以通过主题验证的有效断言

尝试使用 IssueInstant 的未来日期测试 Spring Security SAML 响应失败,因为 Response 没有任何可以通过主题验证的有效断言。更新了 setSkewResponse、setMaxAuthenticationAge、setMaxAssertionTime 和 IDP 签名和加密密钥的 WebSSOProfileConsumerImpl 在 /saml/idp 中更新并通过类路径分配它。有人遇到过这个问题吗?

0 投票
0 回答
56 浏览

spring-boot - 为 Spring Security 原始扩展启用 sessionManagement.sessionFixation

我的团队有一个 Spring Boot Web 应用程序。我们最近在我们公司向客户提供的服务中添加了 SAML 支持。我们基于 spring-security-saml 1.0.6 扩展开发了一个解决方案。

我们的一位客户进行了审查,发现浏览器 sessionId 在成功登录后没有改变。这是主要弹簧安全代码默认打开的功能,并通过 sessionManagement.sessionFixation 选项进行配置。

我已经尝试在我们的 SAML 配置中添加对它的引用,尝试了所有可能的配置选项,但它似乎根本没有任何效果。这是配置 HttpSecurity 对象的 WebSecurityConfigurationAdapter 代码的部分配置:

我看过一篇文章提到需要手动配置 SAML 提供程序以使用为核心 spring 安全性定义的某些对象,但它没有专门处理 sessionFixation 配置。

在用户名/密码登录期间,我可以在日志文件中看到会话 ID 切换,其中 spring 安全模块设置为跟踪:

我不确定过滤器链是否被过早终止,或者 sessionFixation 过滤器是否从未在 SAML 端配置过。有谁知道我怎样才能让它工作?

0 投票
1 回答
206 浏览

spring-boot - 将基于 SAML 的 SSO 与第三方服务提供商集成

我们必须为 SSO 集成第三方 SP。我们的应用程序是 spring(不是 springboot)中的一个包装器,它具有使用 mongo 作为 DB 调用后端服务的身份验证/授权模块。现在的要求是将基于 SSO SAML 的 SP 与第三方集成。第三方提供了要求拥有 IDP 的文档。在 SP 提供的要求中,Nameid 断言必须是持久的、唯一的和不透明的,并且可以是客户端应用程序(我们的应用程序)的用户 ID。我相信我们必须有一个像 SSOCircle 或 Okta 这样的 IDP 或一些开源 IDP 才能与 SP 集成。而且我认为我们可以编写一个单独的 springboot SAML IDP 并将 api 暴露给我们的旧 spring 以登录到 SP。据我了解流动:

  1. 来自我们门户的用户访问第三方 SP 网站或 API。
  2. 第三方 SP 会将用户重定向到我们的 IDP 以登录。他们将​​保存 NameId(用户 ID 或用户 ID 的 UUID 映射),并将其作为 SAML 请求与其他断言一起传递。
  3. 一旦用户成功登录,我们的 IDP 会将用户重定向到第三方 SP 并返回成功响应。

我的问题:

  1. 我们可以(或者我们应该)绕过 IDP 吗?我想这意味着我们自己编写 SAML IDP。请让我知道我的最佳选择,或者不使用 IDP 并编写我们自己的等效项是否是一个好主意。如果我们不能,我会假设我们已经购买了付费专有或使用开源 IDP。
  2. Nameid (unique, persistent, opaque) assertion :这是SP要求之一。如果我们必须使用IDP(我认为),它SP消费者断言要求是使用持久Nameid来传递。它应该是唯一的,持久的和不透明的。所以我们认为 SAML 请求中用户 ID 到 IDP 的 UUID 映射应该没问题。如果我们这样做,我们必须将 UUID 映射作为 nameid assertion 存储在 DB 中。我们是否必须在 DP -SP 集成中仅使用我们的门户用户 ID 作为 nameIds 或 UUID 以满足要求?请评论哪种方法是正确的。
  3. IDP 端和 SP 端的 Nameid 持久性限制:我们端存在一个瓶颈。出于安全考虑,我们的 IT 安全团队可能不会永远允许 NameId 持久映射 UUID,在这种情况下,NameId 映射将在我们端发生变化。如果我们必须使用 UUID 作为 nameid,应该如何解决这个问题?
  4. NameId 配置:当用户从我们的门户请求登录到 SP - 它会作为登录请求传递给 SP,然后 SP 构造 saml 请求并将 nameids 断言传递给 IDP?如果是,将nameids作为登录请求传递给SP的最佳方法是什么?如果不是,SP 如何知道在 SAML 中将哪个 UUID 传递给 IDP?如果映射 nameid 是 UUID,由于安全问题可能会发生变化,我们将如何解决这个问题?. 另一件事是,虽然提到 nameid 在需求中被提及为“持久”,但在需求文档的示例中它们正在显示urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified。我认为这可能是文档中的一个错误。[?]。
  5. 我们可以参考的任何示例 SSO SAML IDP(客户端)应用程序接近上述 1)和 2)?