背景:我的 Web 应用程序在 PROD 中运行,真实用户正在使用它。初始身份验证是使用 Spring 基本安全性实现的。
最近,客户端决定使用 SSO 进行身份验证,因此我的应用应充当客户端 IdP 的 SP。我使用 Spring SAML 将我的应用程序配置为 SP。
在 QA 环境中与客户端 IdP 集成涉及后续步骤:
- 获取并存储从客户收到的 IdP 元数据文件。
- 在环境中部署具有 SP 配置的代码。
- 使用端点生成 SP 元数据文件
/saml/metadata
并与客户共享。 - 从客户 IdP 端获得绿灯,将 SP 元数据文件放在正确的位置。
- 验证 SSO 是否正常工作。
现在,是时候在 PROD 环境中部署 SP SSO 配置,并将其与客户端 PROD IdP 集成。
我不喜欢将上述方法用于 PROD,因为在生成应用程序 SP 元数据文件并将其放在客户 IdP 的正确位置之前,真实用户将无法登录到应用程序。
谁能告诉我在 PROD 上部署 SSO 配置之前,如何提前为我的应用程序生成 SP 元数据文件?
(1) 引用 "最近,客户端决定使用 SSO 进行身份验证,因此我的应用程序应充当客户端 IdP 的 SP。我使用 Spring SAML 将我的应用程序配置为 SP。
回应:
我假设您使用Spring Security SAML的官方GitHub存储库提供的Spring SAML来"将您的应用程序配置为SP"。
(2) 引用"在 QA 环境中与客户 IdP 集成涉及后续步骤:.."
回应:
关于将 Web 应用程序作为 SP 与客户端 IdP 集成的五 (5) 个步骤(由您的帖子提供)是"在 PROD 环境中部署 SP SSO 配置并将其与客户端 PROD IdP 集成"的实用 SAML 标准。
我分享了将 Web 应用程序作为 SAML SP 与 SAML IdP 集成的实践经验,回答了我最近的另一个 Stackoverflow 问题"我提供了一个说明来解决另一个 Stackoverflow 如何生成我的 Java Spring 应用程序的元数据文件,以便与 Ping Federate 等身份提供程序建立连接?
(3) 引用"我不喜欢将上述方法用于 PROD,因为在生成应用程序 SP 元数据文件并将其放置在客户 IdP 的正确位置之前,真实用户将无法登录到应用程序。
回应:
如果您"不喜欢将上述方法用于 PROD",您可以修改 "spring-security-saml/samples/boot/simple-service-provider/"(由 Spring Security SAML 的官方 GitHub 存储库提供)的源代码,将您的 Web 应用程序配置为 SAML SP。
(4)问题"谁能告诉我,在 PROD 上部署 SSO 配置之前,如何提前为我的应用程序生成 SP 元数据文件?">
答:
(I) 关于"如何运行身份提供程序 (IDP) 和服务提供商 (SP) 的简单示例"的自述文件(由 Spring Security SAML 的官方 GitHub 存储库提供)将指导您"在 PROD 上部署 SSO 配置之前,如何提前为我的应用程序生成 SP 元数据文件"。
(II)我重点介绍了"在PROD上部署SSO配置之前,如何提前为我的Web应用程序生成Spring Basic Security的SAML SP元数据文件"的相关信息(引用您的问题)。
步骤 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) 启动网页浏览器以访问网址 http://localhost:8080/sample-sp 以确保 Spring Security SAML 服务提供商运行良好。
(II.b) 启动 Web 浏览器以访问 SP 元数据端点
http://localhost:8080/sample-sp/saml/sp/metadata
下载或"在 PROD 上部署 SSO 配置之前,提前为我的应用生成 SP 元数据文件"(引用您的问题)。
(5)问题"Spring SAML:除了使用/saml/metadata 端点之外,生成 SP 元数据的替代方法">
答:
你可以修改"spring-security-saml/samples/boot/simple-service-provider/src/main/java/sample/config/SecurityConfiguration.java"(由Spring Security SAML的官方GitHub存储库提供)的源代码,以"除了使用/saml/sp/metadata endpoint之外生成SP元数据"。
例如,如果要从特定端点(如/example/metadata)生成 SP 元数据,则只需替换
">super("/saml/sp/", beanConfig);">
(
在下面显示的源代码中) ">super("/example/", beanConfig);">
public SamlSecurity(BeanConfig beanConfig, @Qualifier("appConfig") AppConfig appConfig) {
super("/saml/sp/", beanConfig);
this.appConfig = appConfig;
}
只要您知道端点的 URI 和签名证书,就可以手动生成它们并在配置中指定它。