12.Spring Security SAML 整合身份提供商

12.整合身份提供商

该部分提供了有关Spring SAML与流行身份提供商集成的其他信息。

12.1 Active Directory联合身份验证服务2.0(AD FS)

AD FS 2.0在IDP模式下支持SAML 2.0,并且可以轻松地与SAML扩展集成,用于SSO和SLO。在开始配置之前,请确保满足以下先决条件:

  • 安装AD FS 2.0(http://www.microsoft.com/en-us/download/details.aspx?id=10909)
  • 在AD FS 2.0管理控制台中运行AD FS 2.0联合服务器配置向导
  • 确保SP上的Windows服务器的DNS名称可用,反之亦然
  • 安装Java容器(例如Tomcat)以部署SAML 2 Extension
  • 将容器配置为使用HTTPS,这是AD FS所要求的(http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

12.1.1初始化IDP元数据

  • 从https://adfsserver/FederationMetadata/2007-06/FederationMetadata.xml下载AD FS 2.0元数据
  • 将下载的内容存储到sample / src / main / resources / metadata / FederationMetadata.xml
  • 修改sample / src / main / webapp / WEB-INF / securityContext.xml中的 bean 元数据,并将classpath:security / idp.xml替换为classpath:security / FederationMetadata.xml,并将属性metadataTrustCheck添加到false以跳过签名验证:
<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
	<constructor-arg>
		<bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
			<constructor-arg>
				<bean class="java.util.Timer"/>
			</constructor-arg>
			<constructor-arg>
				<bean class="org.opensaml.util.resource.ClasspathResource">
					<constructor-arg value="/metadata/FederationMetadata.xml"/>
				</bean>
			</constructor-arg>
			<property name="parserPool" ref="parserPool"/>
		</bean>
	</constructor-arg>
	<constructor-arg>
		<bean class="org.springframework.security.saml.metadata.ExtendedMetadata"/>
	</constructor-arg>
	<property name="metadataTrustCheck" value="false"/>
</bean>

12.1.2初始化SP元数据

  • 从sample / target / spring-security-saml2-sample.war部署SAML 2 Extension war存档,或使用带命令的嵌入式Tomcat:mvn tomcat7:run
  • 在浏览器中打开Spring SAML,例如在https:// localhost:8443 / spring-security-saml2-sample,确保使用HTTPS协议
  • 单击元数据管理,登录并从服务提供商列表中选择包含服务器名称的项目
  • 将元数据字段的内容存储到文档metadata.xml,并将其上载到AD FS服务器
  • 在AD FS 2.0管理控制台中,选择“添加信赖方信任”
  • 选择“从文件导入有关信赖方的数据”,然后选择之前创建的metadata.xml文件。选择Next
  • 向导可能会抱怨某些元数据内容不受支持。您可以放心地忽略此警告
  • 继续向导。在“准备添加信任”上,确保选项卡端点包含多个端点值。如果没有,请验证您的元数据是否使用HTTPS协议URL生成
  • 选中“打开编辑声明规则对话框”复选框,然后完成向导
  • 选择“添加规则”,选择“将LDAP属性作为声明发送”,然后按“下一步”
  • 将NameID添加为“Claim rule name”,选择“Active Directory”作为属性存储,选择“SAM-Account-Name”作为LDAP属性,选择“Name ID”作为“Outgoing claim type”,完成向导并确认声明规则窗口,在ADFS 3.0中,您可能需要将名称ID配置为Pass Through声明
  • 通过双击打开提供程序,选择选项卡Advanced并将“Secure hash algorithm”更改为SHA-1

12.1.3测试SSO

在例如https:// localhost:8443 / spring-security-saml2-sample打开Spring SAML示例应用程序,选择您的AD FS服务器并按登录。如果使用了Artifact绑定并且您的AD FS的SSL / TLS证书尚未受信任,请按照错误报告中的说明将其导入samlKeystore.jks。

12.2 Okta

Okta支持单点登录客户指定的SAML 2.0服务提供程序应用程序,例如Spring SAML Extension。在开始配置之前,请确保满足以下先决条件:

  • 准备好Okta实例和管理帐户,Okta许可证必须允许您添加自定义应用程序
  • 安装Java容器(例如Tomcat)以部署SAML 2 Extension

12.2.1部署Spring SAML示例应用程序

  • 从sample / target / spring-security-saml2-sample.war部署SAML 2 Extension war存档,或使用带命令的嵌入式Tomcat:mvn tomcat7:run
  • 在浏览器中打开Spring SAML,例如在http:// localhost:8080 / spring-security-saml2-sample
  • 单击“元数据管理”,登录并从服务提供商处选择包含服务器名称的项目
  • 请注意元数据XML中的Entity ID字段和Assertion Consumer Service URL(ACS),例如http:// localhost:8080 / spring-security-saml2-sample / saml / SSO

可以自定义Spring SAML的实体ID和URL等信息,有关详细信息,请参见第7.1节“服务提供者元数据”

12.2.2配置Okta

  • 以管理员身份登录Okta,选择Admin,选择Applications并单击Create New App
  • 从支持的协议列表中选择SAML 2.0,然后按“ 创建”
  • 定义应用程序名称(例如Spring SAML),可选择定义应用程序图像并按Next
  • 使用以下设置配置SAML:

  • 表12.1。
  • Single Sign on URLUse value noted during Spring SAML initialization, e.g. http://localhost:8080/spring-security-saml2-sample/saml/SSO
    Audience URI (SP Entity ID)Use value noted during Spring SAML initialization, e.g. http://localhost:8080/spring-security-saml2-sample/saml/metadata
    Default RelayStateLeave empty, unless you require Okta to provide a value to Spring SAML
    Name ID formatSelect any of the available options, depending on your requirements
    Application usernameSelect any of the available options, depending on your requirements
    Response (advanced settings)Select "signed"
    Assertion (advanced settings)Select "signed"
    Authentication context class (advanced settings)Select any of the available options
    Request compression (advanced settings)Select "Uncompressed"

  • 定义单点登录后要发送到Spring SAML的属性,然后按“ 下一步”
  • 在反馈页面上选择“这是我们创建的内部应用程序”,然后按“ 完成”
  • 确保将新创建的应用程序分发给要用于测试的用户

12.2.3将Okta元数据导入Spring SAML

  • 在Okta中单击链接“Identity provider metadata”并将下载的内容存储到sample / src / main / resources / metadata / okta.xml
  • 在Spring SAML中修改sample / src / main / webapp / WEB-INF / securityContext.xml中的 bean 元数据,并用classpath:security / okta.xml替换classpath:security / idp.xml:
<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
    <constructor-arg>
        <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
            <constructor-arg>
                <bean class="java.util.Timer"/>
            </constructor-arg>
            <constructor-arg>
                <bean class="org.opensaml.util.resource.ClasspathResource">
                    <constructor-arg value="/metadata/okta.xml"/>
                </bean>
            </constructor-arg>
            <property name="parserPool" ref="parserPool"/>
        </bean>
    </constructor-arg>
    <constructor-arg>
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadata"/>
    </constructor-arg>
</bean>
  • 重新启动Spring SAML以获取应用的更改

12.2.4测试SSO

在例如http://localhost:8080/spring-security-saml2-sample打开Spring SAML示例应用程序,选择您的Okta服务器并按登录。或者,使用Okta在应用程序配置中提供的App Embed Link启动IDP初始化单点登录,例如https://v7security.okta.com/home/v7security_springsaml_1/0oa4vkeakAsUtZ8AI0y6/39139。


(1)