最新の安定バージョンについては、Spring Security 6.4.2 を使用してください! |
Saml 2.0 メタデータ
Spring Security は、アサーティングパーティのメタデータを解析して AssertingPartyDetails
インスタンスを生成したり、RelyingPartyRegistration
インスタンスから証明書利用者のメタデータを公開したりできます。
<saml2:IDPSSODescriptor>
メタデータの解析
RelyingPartyRegistrations
を使用して、アサーティングパーティのメタデータを解析できます。
OpenSAML ベンダーサポートを使用する場合、結果の AssertingPartyDetails
は型 OpenSamlAssertingPartyDetails
になります。これは、以下を実行することで、基礎となる OpenSAML XMLObject を取得できることを意味します。
Java
Kotlin
OpenSamlAssertingPartyDetails details = (OpenSamlAssertingPartyDetails)
registration.getAssertingPartyDetails();
EntityDescriptor openSamlEntityDescriptor = details.getEntityDescriptor();
val details: OpenSamlAssertingPartyDetails =
registration.getAssertingPartyDetails() as OpenSamlAssertingPartyDetails;
val openSamlEntityDescriptor: EntityDescriptor = details.getEntityDescriptor();
<saml2:SPSSODescriptor>
メタデータの作成
以下に示すように、Saml2MetadataFilter
をフィルターチェーンに追加することにより、メタデータエンドポイントを公開できます。
Java
Kotlin
DefaultRelyingPartyRegistrationResolver relyingPartyRegistrationResolver =
new DefaultRelyingPartyRegistrationResolver(this.relyingPartyRegistrationRepository);
Saml2MetadataFilter filter = new Saml2MetadataFilter(
relyingPartyRegistrationResolver,
new OpenSamlMetadataResolver());
http
// ...
.saml2Login(withDefaults())
.addFilterBefore(filter, Saml2WebSsoAuthenticationFilter.class);
val relyingPartyRegistrationResolver: Converter<HttpServletRequest, RelyingPartyRegistration> =
DefaultRelyingPartyRegistrationResolver(this.relyingPartyRegistrationRepository)
val filter = Saml2MetadataFilter(
relyingPartyRegistrationResolver,
OpenSamlMetadataResolver()
)
http {
//...
saml2Login { }
addFilterBefore<Saml2WebSsoAuthenticationFilter>(filter)
}
このメタデータエンドポイントを使用して、依存パーティをアサーティングパーティに登録できます。これは、メタデータエンドポイントを提供するための正しいフォームフィールドを見つけるのと同じくらい簡単です。
デフォルトでは、メタデータのエンドポイントは /saml2/service-provider-metadata/{registrationId}
です。これを変更するには、フィルターで setRequestMatcher
メソッドを呼び出します。
Java
Kotlin
filter.setRequestMatcher(new AntPathRequestMatcher("/saml2/metadata/{registrationId}", "GET"));
filter.setRequestMatcher(AntPathRequestMatcher("/saml2/metadata/{registrationId}", "GET"))
または、コンストラクターにカスタムの証明書利用者登録リゾルバーを登録している場合は、次のように registrationId
ヒントなしでパスを指定できます。
Java
Kotlin
filter.setRequestMatcher(new AntPathRequestMatcher("/saml2/metadata", "GET"));
filter.setRequestMatcher(AntPathRequestMatcher("/saml2/metadata", "GET"))
RelyingPartyRegistration
のルックアップ方法の変更
カスタム RelyingPartyRegistrationResolver
をメタデータエンドポイントに適用するには、次のようにフィルターコンストラクターで直接指定できます。
Java
RelyingPartyRegistrationResolver myRegistrationResolver = ...;
Saml2MetadataFilter metadata = new Saml2MetadataFilter(myRegistrationResolver, new OpenSamlMetadataResolver());
// ...
http.addFilterBefore(metadata, BasicAuthenticationFilter.class);
val myRegistrationResolver: RelyingPartyRegistrationResolver = ...; val metadata = new Saml2MetadataFilter(myRegistrationResolver, OpenSamlMetadataResolver()); // ... http.addFilterBefore(metadata, BasicAuthenticationFilter::class.java);
RelyingPartyRegistrationResolver
を適用して URI から registrationId
を削除する場合は、次のようにフィルター内の URI も変更する必要があります。
Java
metadata.setRequestMatcher("/saml2/metadata")
metadata.setRequestMatcher("/saml2/metadata")