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示例应用程序包含在示例目录中。我们将按以下步骤自定义示例应用程序的内容。
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数据。