Spring SAML:除了使用 /saml/metadata 端点之外生成 SP 元数据的替代方法

Spring SAML: alternative ways to generate SP metadata besides using /saml/metadata endpoint

背景: 我的网络应用程序是 运行 PROD,真实用户正在使用它。初始身份验证是使用 Spring 基本安全实现的。

最近,客户端决定使用 SSO 进行身份验证,因此我的应用程序应充当客户端 IdP 的 SP。我使用 Spring SAML 将我的应用程序配置为 SP。

在 QA 环境中与客户端 IdP 集成涉及后续步骤:

  1. 获取并存储从客户处收到的 IdP 元数据文件。
  2. 在环境中使用 SP 配置部署代码。
  3. 使用 /saml/metadata 端点生成 SP 元数据文件并与客户共享。
  4. 从客户 IdP 方面获得绿灯,SP 元数据文件位于正确的位置。
  5. 验证 SSO 是否正常工作。

现在,是时候在 PROD 环境中部署 SP SSO 配置并将其与客户端 PROD IdP 集成了。

我不喜欢将上述方法用于 PROD,因为在生成应用 SP 元数据文件并将其放在客户 IdP 的正确位置之前,真实用户将无法登录应用。

谁能告诉我如何在 PROD 上部署 SSO 配置之前提前为我的应用生成 SP 元数据文件?

只要知道端点的 URI 和签名证书,就可以手动生成它们并在配置中指定。

(1) 引用 "Recently, client decided to use SSO for authentication, so my app should act as SP with client IdP. I used Spring SAML to configure my app as SP."

响应

我假设您使用 the official GitHub repository of Spring Security SAML 提供的 Spring SAML 到 "configure your app as SP"。

(2) 引用 "Integration with client IdP on QA environment involved next steps:.."

响应

关于将您的 Web 应用程序作为 SP 与客户端 IdP 集成的五 (5) 个步骤(由您的 post 提供)是 "deploying SP SSO configuration on PROD environment and integrate it with client PROD IdP."

的实用 SAML 标准

我通过提供我对另一个最近的 Whosebug 问题“”的回答分享了将网络应用程序作为 SAML SP 与 SAML IdP 集成的实践经验

(3) 引用 "I don't like to use the approach above for PROD, as real users will not be able to login into the app until app SP metadata file will be generated, and put in a right place at customer IdP."

响应

如果您"don't like to use the approach above for PROD",您可以修改"spring-security-saml/samples/boot/simple-service-provider/"(由the official GitHub repository of Spring Security SAML提供)的源代码,将您的网络应用配置为SAML SP。

(4) 问题 "Can anyone tell me how can I generate SP metadata file for my app in advance, before deploying SSO configuration on PROD?"

回答:

(I) "How to run a simple sample of an Identity Provider (IDP) and Service Provider (SP)" 上的 README(由 the official GitHub repository of Spring Security SAML 提供)将指导您 "how can I generate SP metadata file for my app in advance, before deploying SSO configuration on PROD".

(二)我在"how to generate SAML SP metadata file of Spring Basic Security for my web app in advance, before deploying SSO configuration on PROD"上突出显示相关信息(引用你的问题)

第 2 步 - 启动服务提供者

服务提供商在 http://localhost:8080/sample-sp

上运行
$git clone https://github.com/spring-projects/spring-security-saml

$cd spring-security-saml

$./gradlew :spring-security-saml-samples/boot/simple-service-provider:bootRun &

(II.a) 启动网络浏览器访问 URL http://localhost:8080/sample-sp 确保 Spring 安全 SAML 服务提供商运行良好。

(II.b) 启动 Web 浏览器以访问 SP 元数据端点
http://localhost:8080/sample-sp/saml/sp/metadata
下载或 "generate SP metadata file for my app in advance, before deploying SSO configuration on PROD"(引用您的问题)。

(5) 问题 "Spring SAML: alternative ways to generate SP metadata besides using /saml/metadata endpoint"

回答:

您可以将"spring-security-saml/samples/boot/simple-service-provider/src/main/java/sample/config/SecurityConfiguration.java"(由the official GitHub repository of Spring Security SAML提供)的源代码修改为"generate SP metadata besides using /saml/sp/metadata endpoint"。

例如,如果要从特定端点(例如/example/metadata)生成 SP 元数据,则只需替换
"super("/saml/sp/", beanConfig);"
(在下面显示的源代码中)使用
"super("/示例/", beanConfig);"

        public SamlSecurity(BeanConfig beanConfig, @Qualifier("appConfig") AppConfig appConfig) {
            super("/saml/sp/", beanConfig);
            this.appConfig = appConfig;
}