如何生成我的 Java Spring 应用程序的元数据文件以与 Ping Federate 等身份提供者建立连接?

How can I generate metadata file of my Java Spring Application to establish a connection with Identity Provider like Ping Federate?

我使用单点登录 (SSO) 有一段时间了。我使用 Ping Federate 作为身份提供者 (IdP),并使用示例 Java spring-boot 应用程序作为服务提供者 (SP)。使用的协议是 SAML。

我已经从 https://start.spring.io 下载了具有 "Web" 和 "Security" 依赖项的 spring 应用程序,并期待建立连接。在进行配置时,需要在 Ping Federate 上传 spring 应用程序的元数据文件,在本例中为服务提供商。 我想知道如何为我的 spring 应用程序生成元数据文件?

我参考了一些文档但无法帮助自己。 https://docs.spring.io/spring-security-saml/docs/1.0.0.RELEASE/reference/html/chapter-quick-start.html

任何帮助都会有很大帮助。

解决您的问题 "how can I generate the metadata file for my spring app?"、

(1) 我下载了最新版本的 Ping Federate,即 pingfederate-9.2。2.zip

(2) 我参考你post.

提供的信息,在Ubuntu 16.04上搭建了"Ping Federate as an Identity Provider(IdP) and a sample Java spring-boot application as the Service Provider(SP)"

(3) 然后我参考你post.

提供的信息验证了"Ping Federate as an Identity Provider(IdP)"和"a sample Java spring-boot application as the Service Provider(SP)"之间的SAML通信成功

以下响应和答案将帮助您通过 "Ping Federate (as an Identity Provider(IdP))" 提供的 SAML SSO 登录 "my spring app (as Service Provider (SP))"。

(1) 引用您的 post "I have downloaded the spring application from https://start.spring.io with "Web" 和 "Security" 依赖项并期待建立连接。"

响应

我通过执行以下命令执行了与您相同的任务。

# Download demo.zip from https://start.spring.io with "Web" and "Security" dependencies 

$unzip demo.zip

$cd demo

$sudo mvn package

$sudo cp target/demo-0.0.1-SNAPSHOT.war /opt/tomcat/webapps/

$ls /opt/tomcat/webapps/demo-0.0.1-SNAPSHOT/WEB-INF/
classes  lib  lib-provided

现在我们发现 spring 应用程序(您使用 "Web" 和 "Security" 依赖项下载)没有安装 SAML SP。换句话说,spring 应用程序不是启用 SAML SP 的应用程序。 因此"I can NOT generate the metadata file for my spring app".

(2) 引用你的 post "I referred some docs but could not help myself. https://docs.spring.io/spring-security-saml/docs/1.0.0.RELEASE/reference/html/chapter-quick-start.html"

响应

在你的post

中引用上面link"spring-security-saml"提供的重要信息
4.2.1 Downloading sample application 

Download the Spring SAML Extension either from sources or from one of the releases.

(I) 单击 GitHub 存储库中 "from sources" 的 link。

然后单击文件夹 "samples"(即 spring-security-saml/samples/)以阅读 "How to run a simple sample of an Identity Provider (IDP) and Service Provider (SP)" 上的自述文件。

(II) 按照README提供的说明,我已经验证"SP initiated login and IDP initiated login"成功。

因为示例应用程序将主机名硬编码为 localhost,

不失一般性,为了演示目的,通过修改本地计算机的 DNS 主机文件,我们假设

"Ping Federate as an Identity Provider(IdP)" 的主机名是 ping.example.com

"a sample Java spring-boot application as the Service Provider(SP)" 的主机名是 localhost

(3) 引用你的问题 "It is required to upload the metadata file of the spring app which is the Service Provider in this case at Ping Federate while doing the configuration. I want to know how can I generate the metadata file for my spring app?"

回答:

(I) 访问使用 "spring-security-saml/samples/"、

构建的 spring 应用程序的 SAML SP 元数据文件端点

http://localhost:8080/sample-sp/saml/sp/metadata

到"generate/download the metadata file for my spring app",即saml-sp-metadata.xml

(II) 将我的 spring 应用程序(即 saml-sp-metadata.xml)的元数据文件上传到 "Ping Federate as an Identity Provider(IdP)"

(III) 将 "Ping Federate as an Identity Provider(IdP)" 的 IdP 元数据文件上传到 "my spring app as Service Provider (SP)"

(a) 在"my spring app as Service Provider (SP)"

的配置文件末尾添加如下代码
$sudo vi  spring-security-saml/samples/boot/simple-service-provider/src/main/resources/application.yml 

        - alias: pingfederate
          metadata: https://ping.example.com:9031/pf/federation_metadata.ping?PartnerSpId=spring.security.saml.sp.id
          link-text: Ping Federate IDP
          authentication-request-binding: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST

(b) 按照 "How to run a simple sample of an Identity Provider (IDP) and Service Provider (SP)" 上 GitHub 存储库

上的 README 重新启动我的 spring 应用作为服务提供商 (SP)

为了将 "Ping Federate as an Identity Provider(IdP)" 的 IdP 元数据上传到 "my spring app as Service Provider (SP)"。

(IV) 验证 Ping Federate(作为身份提供商 (IdP))为我的 spring 应用程序(作为服务提供商 (SP))提供的 SAML SSO

(a) 为 "my spring app as Service Provider (SP)"

访问 Ping Federate IdP 发起的 SSO 端点

https://ping.example.com:9031/idp/startSSO.ping?PartnerSpId=spring.security.saml.sp.id

(b) 将 Ping Federate 本地用户帐户的 username/password 凭据(例如 johndoe/password)提交到弹出的对话框

(c) 您已成功重定向并以服务提供商 (SP) 身份登录到我的 spring 应用程序。

以下消息将显示在我作为服务提供商 (SP) 的 spring 应用程序的主屏幕上。

Success                             User:johndoe 

You are authenticated!