4.Spring Security SAML 快速入门指南

4.快速入门指南

本章将指导您完成使用SAML 2.0协议轻松地将Spring Security SAML Extension与ssocircle.com的IDP服务集成所需的步骤。完成后,您将获得针对单个身份提供商的Web SSO的工作示例。这些步骤将指导您完成示例应用程序的部署,IDP元数据的配置(描述如何使用SAML 2.0协议连接到IDP服务器的XML文档)和SP元数据(描述您自己的服务的XML文档)以及Web单一标志的测试 -在和单点注销。

可以在saml-federation.appspot.com上获得示例应用程序的公共演示

4.1先决条件

在开始安装之前,请确保以下项目可用:

  • Java 1.6+ SDK
  • Apache Maven

SAML Extension依赖于JAXP的XML处理功能。某些旧版本的JRE可能需要更新嵌入式JAXP库。如果您遇到XML处理异常,请在JDK安装中创建文件夹jdk / jre / lib / endorsed,并在lib /中包含文件,这些文件来自http://shibboleth.net/downloads/java-opensaml/上提供的最新OpenSAML存档 。根据您的应用程序服务器或容器,已签名文件夹的位置可能有所不同。

由于美国的出口限制,Java JDK附带了一组有限的加密功能。使用SAML扩展可能需要安装无限强度管辖区域策略文件,以消除这些限制。

4.2安装步骤

4.2.1下载示例应用程序

源代码或其中一个版本下载Spring SAML扩展。

Spring SAML示例应用程序包含在示例目录中。我们将按以下步骤自定义示例应用程序的内容。

4.2.2 IDP元数据的配置

修改 示例应用程序的文件 sample / src / main / webapp / WEB-INF / securityContext.xml并替换元数据 bean,如下所示:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
	<constructor-arg>
		<list>
			<bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
				<constructor-arg>
					<value type="java.lang.String">http://idp.ssocircle.com/idp-meta.xml</value>
				</constructor-arg>
				<constructor-arg>
					<value type="int">5000</value>
				</constructor-arg>
				<property name="parserPool" ref="parserPool"/>
			</bean>
		</list>
	</constructor-arg>
</bean>

设置告诉系统从给定的URL下载IDP元数据,超时为5秒。在生产系统中,元数据应存储为本地文件,或者使用具有已配置信任的SSL / TLS从源下载,或者提供经过数字签名的元数据。

4.2.3生成SP元数据

修改 示例应用程序的文件 sample / src / main / webapp / WEB-INF / securityContext.xml,替换metadataGeneratorFilter bean,如下所示,并确保将entityId值替换为SSO Circle服务中唯一的字符串(例如,urn:测试:提供yourname:yourcity):

<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
	<constructor-arg>
		<bean class="org.springframework.security.saml.metadata.MetadataGenerator">
			<property name="entityId" value="replaceWithUniqueIdentifier"/>
			<property name="extendedMetadata">
				<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
					<property name="signMetadata" value="false"/>
					<property name="idpDiscoveryEnabled" value="true"/>
				</bean>
			</property>
		</bean>
	</constructor-arg>
</bean>

4.2.4编译

从源代码构建时,使用以下方法编译整个项目并将工件安装到本地Maven存储库中:

gradlew build install

使用release zip时,使用以下命令编译示例目录中的示例应用程序:

mvn package

您可以在目录 sample / build / libs /(gradle)或sample / target /(maven)中找到已编译的war archive spring-security-saml2-sample.war。

可以使用gradlew eclipse或gradlew创建IDE的项目文件。

4.2.5部署

您可以使用以下命令从发布示例目录启动应用程序:

mvn tomcat7:run

使用gradle可以实现相同:

gradlew tomcatRun

启动后,Spring SAML示例应用程序将在http:// localhost:8080 / spring-security-saml2-sample上提供

或者,您可以将war存档部署到应用程序服务器或容器。

4.2.6将SP元数据上传到IDP

下载当前SP元数据:

  • 将Web浏览器打开到已部署应用程序的URL。
  • 选择元数据信息。
  • 从类别服务提供商中选择第一项,例如 http:// localhost:8080 / spring-security-saml2-sample / saml / metadata
  • 将元数据textarea的内容复制到剪贴板。

将SP元数据上传到IDP:

  • 在www.ssocircle.com注册并登录该服务。
  • 选择Metadata Manager,然后单击添加新服务提供商。
  • 输入FQDN字段中第4.2.3节“生成SP元数据”中配置的entityId。
  • 将剪贴板的内容粘贴到元数据信息textarea中。
  • 按“提交”按钮存储元数据。
  • 从SSOCircle服务注销。

4.3测试单点登录和单点注销

打开SP应用程序的首页,选择http://idp.ssocircle.com IDP并按登录。系统将使用SAML 2.0协议生成新的身份验证请求,对其进行数字签名并将其发送到IDP。在IDP使用您的帐户进行身份验证后,您将被重定向回您的应用程序并自动登录。

按本地注销将破坏本地会话并注销用户。当会话仍然在IDP处于活动状态时,无需输入凭据即可继续尝试重新进行身份验证。

按全局注销将破坏本地会话和IDP会话。

在使用配置的服务提供商标识符替换服务提供商标识符后,您可以使用URL https://idp.ssocircle.com:443/sso/saml2/jsp/idpSSOInit.jsp?metaAlias=/publicidp&spEntityID=replaceWithUniqueIdentifier测试IDP初始化单点登录作为securityContext.xml中的entityId。可以使用参数RelayState提供发送到SP的relayState数据。


(7)