Spring SAML中

时间:2016-03-21 17:07:10

标签: spring-security spring-saml

我试图了解Spring SAML中发送和接收身份验证请求的流程。我注意到在进程中的许多点上都使用了bean SAMLContextProvider。它的目的是什么?没有它,这个过程可以工作吗?

此bean在securityContext.xml上被引用为:

 <bean id="contextProvider" class="org.springframework.security.saml.context.SAMLContextProviderImpl"/>

1 个答案:

答案 0 :(得分:0)

类SAMLContextProviderImpl是在春天SAML中起主要作用的重要类之一...它解码和编码SAML请求/响应并转换spring可以理解它的方式。它还使春天能够理解本地实体/应用程序的entityId,角色,元数据,安全密钥......

  

Context provider填充有关本地服务的信息   提供者(您的应用程序),例如entityId,角色,元数据,安全性   用于验证签名的密钥,SSL凭证和信任引擎   和SSL / TLS连接。一旦填充的上下文可用   参与处理传入或传出的所有组件   SAML消息。 ContextProvider可以自定义来改变行为   SAML扩展。默认实现   org.springframework.security.saml.context.SAMLContextProviderImpl   依赖于ExtendedMetadata中可用的信息并执行   以下步骤用于创建上下文:

  • 通过在/ alias /之后解析部分URL(例如https://www.myserver.com/saml_extension/saml/sso/alias/myAlias?idp=myIdp中的myAlias)并将其与ExtendedMetadata中指定的属性别名进行匹配来找到本地SP的entityId。如果URL不包含任何别名部分,则使用在元数据bean上配置了属性hostedSPName的默认服务提供者。
  • 填充用于解密发送给此服务提供商的数据的凭据。如果ExtendedMetadata指定属性encryptionKey,它将用作别名来从keyManager bean查找私钥。否则将使用keyManager bean的defaultKey。
  • 填充用于SSL / TLS客户端身份验证的凭据。如果ExtendedMetadata指定属性tlsKey,它将用作从keyManager bean查找键的别名。否则,将不会为客户端身份验证提供凭据。
  • 填充信任引擎以验证签名。根据SecurityMetadata信任引擎中的securityProfile设置,基于第8.2.1节“元数据互操作性配置文件(MetaIOP)”或第8.2.2节,创建“PKIX配置文件”。 填充信任引擎以验证SSL / TLS连接。根据第8.2.1节“元数据互操作性配置文件(MetaIOP)”或第8.2.2节中的ExtendedMetadata信任引擎中的sslSecurityProfile设置,将创建“PKIX配置文件”。 在初始化SSO期间,还要求ContextProvider提供对等IDP的元数据。系统执行以下步骤以查找要使用的对等IDP:

在初始化SSO期间,还要求ContextProvider提供对等IDP的元数据。系统执行以下步骤以查找要使用的对等IDP:

  • 加载HttpRequest对象的参数idp,并尝试通过entityId定位对等IDP。如果没有提供idp参数,系统将启动IDP发现过程(在本地SP的ExtendedMetadata中启用时)或使用元数据bean中指定的默认IDP。

参考:请参阅Spring SAML Doc的10.2 Context Provider部分。 Spring SAML Doc

Implementation Doc