2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								[[servlet-saml2login-metadata]]
							 
						 
					
						
							
								
									
										
										
										
											2023-02-15 17:53:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								= Saml 2.0 Metadata
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Spring Security can <<parsing-asserting-party-metadata,parse asserting party metadata>> to produce an `AssertingPartyDetails` instance as well as <<publishing-relying-party-metadata,publish relying party metadata>> from a `RelyingPartyRegistration` instance.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[[parsing-asserting-party-metadata]]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								== Parsing `<saml2:IDPSSODescriptor>` metadata
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								You can parse an asserting party's metadata xref:servlet/saml2/login/overview.adoc#servlet-saml2login-relyingpartyregistrationrepository[using `RelyingPartyRegistrations`].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								When using the OpenSAML vendor support, the resulting `AssertingPartyDetails` will be of type `OpenSamlAssertingPartyDetails`.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								This means you'll be able to do get the underlying OpenSAML XMLObject by doing the following:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:31:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[tabs]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								======
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Java::
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2023-02-15 17:53:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[source,java,role="primary"]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								OpenSamlAssertingPartyDetails details = (OpenSamlAssertingPartyDetails)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        registration.getAssertingPartyDetails();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								EntityDescriptor openSamlEntityDescriptor = details.getEntityDescriptor();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:31:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Kotlin::
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2023-02-15 17:53:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[source,kotlin,role="secondary"]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								val details: OpenSamlAssertingPartyDetails =
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        registration.getAssertingPartyDetails() as OpenSamlAssertingPartyDetails;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								val openSamlEntityDescriptor: EntityDescriptor = details.getEntityDescriptor();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:31:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								======
							 
						 
					
						
							
								
									
										
										
										
											2023-02-15 17:53:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[[publishing-relying-party-metadata]]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								== Producing `<saml2:SPSSODescriptor>` Metadata
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can publish a metadata endpoint using the `saml2Metadata` DSL method, as you'll see below:
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:30:41 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[tabs]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								======
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Java::
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								[source,java,role="primary"]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								http
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // ...
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .saml2Login(withDefaults())
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    .saml2Metadata(withDefaults());
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:30:41 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Kotlin::
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								[source,kotlin,role="secondary"]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								http {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //...
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    saml2Login { }
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    saml2Metadata { }
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:30:41 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								======
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								You can use this metadata endpoint to register your relying party with your asserting party.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								This is often as simple as finding the correct form field to supply the metadata endpoint.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								By default, the metadata endpoint is `+/saml2/metadata+`, though it also responds to `+/saml2/metadata/{registrationId}+` and `+/saml2/service-provider-metadata/{registrationId}+`.
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can change this by calling the `metadataUrl` method in the DSL:
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:30:41 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[tabs]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								======
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Java::
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								[source,java,role="primary"]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								.saml2Metadata((saml2) -> saml2.metadataUrl("/saml/metadata"))
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:30:41 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Kotlin::
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								[source,kotlin,role="secondary"]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								saml2Metadata {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									metadataUrl = "/saml/metadata"
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
									
										
										
										
											2021-10-29 11:29:35 -06:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:30:41 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								======
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 12:35:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								== Changing the Way a `RelyingPartyRegistration` Is Looked Up
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								If you have a different strategy for identifying which `RelyingPartyRegistration` to use, you can configure your own `Saml2MetadataResponseResolver` like the one below:
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 12:35:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:31:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[tabs]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								======
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Java::
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 12:35:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[source,java,role="primary"]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Bean
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Saml2MetadataResponseResolver metadataResponseResolver(RelyingPartyRegistrationRepository registrations) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RequestMatcherMetadataResponseResolver metadata = new RequestMatcherMetadataResponseResolver(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											(id) -> registrations.findByRegistrationId("relying-party"));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									metadata.setMetadataFilename("metadata.xml");
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return metadata;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 12:35:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:40:45 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Kotlin::
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:31:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								+
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[source,kotlin,role="secondary"]
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 12:35:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-03-09 09:23:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Bean
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fun metadataResponseResolver(val registrations: RelyingPartyRegistrationRepository): Saml2MetadataResponseResolver {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    val metadata = new RequestMatcherMetadataResponseResolver(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											id: String -> registrations.findByRegistrationId("relying-party"))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									metadata.setMetadataFilename("metadata.xml")
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return metadata
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 12:35:04 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								----
							 
						 
					
						
							
								
									
										
										
										
											2023-06-18 21:31:35 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								======