クラス OpenSaml4AuthenticationProvider
- 実装されたすべてのインターフェース:
AuthenticationProvider
Assertion
を含む Response
オブジェクトを受信するときの SAML 認証用の AuthenticationProvider
の実装。この実装は OpenSAML 4
ライブラリを使用します。OpenSaml4AuthenticationProvider
は、アサーティングパーティである ID プロバイダー(IDP)と依存パーティであるサービスプロバイダー(SP、このアプリケーション)に関する情報とともに、デコードされた XML 形式 Saml2AuthenticationToken.getSaml2Response()
で SAML レスポンスを含む Saml2AuthenticationToken
オブジェクトをサポートします。
Saml2AuthenticationToken
は SAML レスポンスオブジェクトに処理されます。SAML レスポンスオブジェクトに署名できます。レスポンスが署名されている場合、アサーションに署名は必要ありません。
レスポンスオブジェクトにはアサーションのリストを含めることができますが、このプロバイダーは認証のために最初の有効なアサーションのみを利用します。検証に合格しないアサーションは無視されます。有効なアサーションが見つからない場合、Saml2AuthenticationException
がスローされます。
このプロバイダーは、2 種類の暗号化された SAML 要素をサポートします
アサーションが暗号化されている場合、アサーションの署名検証は不要です。このプロバイダーは、構成されたアサーティングパーティ、IDP、検証証明書に対して X509 証明書検証を実行しません。
- 導入:
- 5.5
- 関連事項:
ネストされたクラスのサマリー
修飾子と型クラス説明static class
OpenSAMLAssertion
とそれに関連する認証トークンを含むタプル。static class
OpenSAMLResponse
とそれに関連する認証トークンを含むタプル。コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明authenticate
(Authentication authentication) AuthenticationManager.authenticate(Authentication)
と同じ契約で認証を実行します。static org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken,
Saml2ResponseValidatorResult> 各 SAML 2.0 アサーションおよび関連するAuthentication
トークンを検証するためのデフォルト戦略を構築しますstatic org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken,
Saml2ResponseValidatorResult> createDefaultAssertionValidator
(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken, org.opensaml.saml.common.assertion.ValidationContext> contextConverter) 使用すべきではありません。static org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken,
Saml2ResponseValidatorResult> createDefaultAssertionValidatorWithParameters
(ConsumerSE<MapSE<StringSE, ObjectSE>> validationContextParameters) 各 SAML 2.0 アサーションおよび関連するAuthentication
トークンを検証するためのデフォルト戦略を構築しますstatic org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken,
Saml2Authentication> SAML 2.0 レスポンスとAuthentication
トークンをSaml2Authentication
に変換するためのデフォルト戦略を構築しますstatic org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken,
Saml2ResponseValidatorResult> SAML 2.0 レスポンスを検証するためのデフォルト戦略を構築するvoid
setAssertionElementsDecrypter
(ConsumerSE<OpenSaml4AuthenticationProvider.AssertionToken> assertionDecrypter) 検証済みのAssertion
の要素を復号化するために使用するConsumer
SE 戦略を設定します。void
setAssertionValidator
(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken, Saml2ResponseValidatorResult> assertionValidator) SAML 2.0 レスポンスの各Assertion
の検証に使用するConverter
を設定します。void
setResponseAuthenticationConverter
(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken, ? extends AbstractAuthenticationToken> responseAuthenticationConverter) void
setResponseElementsDecrypter
(ConsumerSE<OpenSaml4AuthenticationProvider.ResponseToken> responseElementsDecrypter) 検証済みのResponse
の要素を復号化するために使用するConsumer
SE 戦略を設定します。void
setResponseValidator
(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken, Saml2ResponseValidatorResult> responseValidator) SAML 2.0 レスポンスの検証に使用するConverter
を設定します。boolean
このAuthenticationProvider
が指定されたAuthentication
オブジェクトをサポートする場合、true
を返します。
コンストラクターの詳細
OpenSaml4AuthenticationProvider
public OpenSaml4AuthenticationProvider()
メソッドの詳細
setResponseElementsDecrypter
public void setResponseElementsDecrypter(ConsumerSE<OpenSaml4AuthenticationProvider.ResponseToken> responseElementsDecrypter) 検証済みのResponse
の要素を復号化するために使用するConsumer
SE 戦略を設定します。デフォルトの戦略では、OpenSAML のDecrypter
を使用してすべてのEncryptedAssertion
を復号化し、結果をResponse.getAssertions()
に追加します。この方法を使用して、Decrypter
インスタンスを次のように構成できます。OpenSamlAuthenticationProvider provider = new OpenSamlAuthenticationProvider(); provider.setResponseElementsDecrypter((responseToken) -> { DecrypterParameters parameters = new DecrypterParameters(); // ... set parameters as needed Decrypter decrypter = new Decrypter(parameters); Response response = responseToken.getResponse(); EncryptedAssertion encrypted = response.getEncryptedAssertions().get(0); try { Assertion assertion = decrypter.decrypt(encrypted); response.getAssertions().add(assertion); } catch (Exception e) { throw new Saml2AuthenticationException(...); } });
または、独自のカスタム復号化インターフェースがある場合は、同じパターンが適用されます。OpenSamlAuthenticationProvider provider = new OpenSamlAuthenticationProvider(); Converter<EncryptedAssertion, Assertion> myService = ... provider.setResponseDecrypter((responseToken) -> { Response response = responseToken.getResponse(); response.getEncryptedAssertions().stream() .map(service::decrypt).forEach(response.getAssertions()::add); });
これは、外部サービスを使用して復号化を実行する場合に役立ちます。- パラメーター:
responseElementsDecrypter
- レスポンス要素を復号化するためのConsumer
SE- 導入:
- 5.5
setResponseValidator
public void setResponseValidator(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken, Saml2ResponseValidatorResult> responseValidator) SAML 2.0 レスポンスの検証に使用するConverter
を設定します。次のようにcreateDefaultResponseValidator()
に委譲することで、引き続きデフォルトのバリデータを呼び出すことができます。OpenSaml4AuthenticationProvider provider = new OpenSaml4AuthenticationProvider(); provider.setResponseValidator(responseToken -> { Saml2ResponseValidatorResult result = createDefaultResponseValidator() .convert(responseToken) return result.concat(myCustomValidator.convert(responseToken)); });
- パラメーター:
responseValidator
- 使用するConverter
- 導入:
- 5.6
setAssertionValidator
public void setAssertionValidator(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken, Saml2ResponseValidatorResult> assertionValidator) SAML 2.0 レスポンスで各Assertion
を検証するために使用するConverter
を設定します。次のようにcreateAssertionValidator(java.lang.String, org.springframework.core.convert.converter.Converter<org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider.AssertionToken, org.opensaml.saml.saml2.assertion.SAML20AssertionValidator>, org.springframework.core.convert.converter.Converter<org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider.AssertionToken, org.opensaml.saml.common.assertion.ValidationContext>)
に委譲することで、引き続きデフォルトのバリデータを呼び出すことができます。OpenSamlAuthenticationProvider provider = new OpenSamlAuthenticationProvider(); provider.setAssertionValidator(assertionToken -> { Saml2ResponseValidatorResult result = createDefaultAssertionValidator() .convert(assertionToken) return result.concat(myCustomValidator.convert(assertionToken)); });
この方法を使用して、次のように、デフォルトとは異なるValidationContext
を使用するようにプロバイダーを構成することもできます。OpenSamlAuthenticationProvider provider = new OpenSamlAuthenticationProvider(); provider.setAssertionValidator( createDefaultAssertionValidator(assertionToken -> { Map<String, Object> params = new HashMap<>(); params.put(CLOCK_SKEW, 2 * 60 * 1000); // other parameters return new ValidationContext(params); }));
createValidationContext(org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider.AssertionToken, java.util.function.Consumer<java.util.Map<java.lang.String, java.lang.Object>>)
を調べて、ValidationContext
を構築する方法を確認してください。デフォルトのバリデーターに委譲する必要はありません。完全に自分のものに安全に置き換えることができます。署名の検証は、このバリデーターとは別のステップとして実行されることに注意してください。- パラメーター:
assertionValidator
- 使用するバリデータ- 導入:
- 5.4
setAssertionElementsDecrypter
public void setAssertionElementsDecrypter(ConsumerSE<OpenSaml4AuthenticationProvider.AssertionToken> assertionDecrypter) 検証済みのAssertion
の要素を復号化するために使用するConsumer
SE 戦略を設定します。この方法を使用して、次のように使用されるDecrypter
を構成できます。OpenSamlAuthenticationProvider provider = new OpenSamlAuthenticationProvider(); provider.setResponseDecrypter((assertionToken) -> { DecrypterParameters parameters = new DecrypterParameters(); // ... set parameters as needed Decrypter decrypter = new Decrypter(parameters); Assertion assertion = assertionToken.getAssertion(); EncryptedID encrypted = assertion.getSubject().getEncryptedID(); try { NameID name = decrypter.decrypt(encrypted); assertion.getSubject().setNameID(name); } catch (Exception e) { throw new Saml2AuthenticationException(...); } });
または、独自のカスタムインターフェースがある場合は、同じパターンが適用されます。OpenSamlAuthenticationProvider provider = new OpenSamlAuthenticationProvider(); MyDecryptionService myService = ... provider.setResponseDecrypter((responseToken) -> { Assertion assertion = assertionToken.getAssertion(); EncryptedID encrypted = assertion.getSubject().getEncryptedID(); NameID name = myService.decrypt(encrypted); assertion.getSubject().setNameID(name); });
- パラメーター:
assertionDecrypter
- アサーション要素を解読するためのConsumer
SE- 導入:
- 5.5
setResponseAuthenticationConverter
public void setResponseAuthenticationConverter(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken, ? extends AbstractAuthenticationToken> responseAuthenticationConverter) 検証済みのResponse
をAbstractAuthenticationToken
に変換するために使用するConverter
を設定します。次のようにcreateDefaultResponseAuthenticationConverter()
を呼び出すことにより、デフォルトの動作に委譲できます。OpenSamlAuthenticationProvider provider = new OpenSamlAuthenticationProvider(); Converter<ResponseToken, Saml2Authentication> authenticationConverter = createDefaultResponseAuthenticationConverter(); provider.setResponseAuthenticationConverter(responseToken -> { Saml2Authentication authentication = authenticationConverter.convert(responseToken); User user = myUserRepository.findByUsername(authentication.getName()); return new MyAuthentication(authentication, user); });
- パラメーター:
responseAuthenticationConverter
- 使用するConverter
- 導入:
- 5.4
createDefaultResponseValidator
public static org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken,Saml2ResponseValidatorResult> createDefaultResponseValidator()SAML 2.0 レスポンスを検証するためのデフォルト戦略を構築する- 戻り値:
- デフォルトのレスポンスバリデータ戦略
- 導入:
- 5.6
createDefaultAssertionValidator
public static org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken,Saml2ResponseValidatorResult> createDefaultAssertionValidator()各 SAML 2.0 アサーションおよび関連するAuthentication
トークンを検証するためのデフォルト戦略を構築します- 戻り値:
- デフォルトのアサーションバリデータ戦略
createDefaultAssertionValidator
@DeprecatedSE public static org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken,Saml2ResponseValidatorResult> createDefaultAssertionValidator(org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken, org.opensaml.saml.common.assertion.ValidationContext> contextConverter) 使用すべきではありません。各 SAML 2.0 アサーションおよび関連するAuthentication
トークンを検証するためのデフォルト戦略を構築します- パラメーター:
contextConverter
- 検証される各アサーションのValidationContext
を生成するために使用する変換戦略- 戻り値:
- デフォルトのアサーションバリデータ戦略
createDefaultAssertionValidatorWithParameters
public static org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.AssertionToken,Saml2ResponseValidatorResult> createDefaultAssertionValidatorWithParameters(ConsumerSE<MapSE<StringSE, ObjectSE>> validationContextParameters) 各 SAML 2.0 アサーションおよび関連するAuthentication
トークンを検証するためのデフォルト戦略を構築します- パラメーター:
validationContextParameters
- 検証されるアサーションごとにValidationContext
に渡される値を編集するためのコンシューマー- 戻り値:
- デフォルトのアサーションバリデータ戦略
- 導入:
- 5.8
createDefaultResponseAuthenticationConverter
public static org.springframework.core.convert.converter.Converter<OpenSaml4AuthenticationProvider.ResponseToken,Saml2Authentication> createDefaultResponseAuthenticationConverter()SAML 2.0 レスポンスとAuthentication
トークンをSaml2Authentication
に変換するためのデフォルト戦略を構築します- 戻り値:
- デフォルトのレスポンス認証コンバーター戦略
authenticate
インターフェースからコピーされた説明:AuthenticationProvider
AuthenticationManager.authenticate(Authentication)
と同じ契約で認証を実行します。- 次で指定:
- インターフェース
AuthenticationProvider
のauthenticate
- パラメーター:
authentication
- 認証リクエストオブジェクト。Saml2AuthenticationToken
型である必要があります- 戻り値:
Saml2Authentication
(アサーションが有効な場合)- 例外:
AuthenticationException
- 検証例外が発生した場合
supports
インターフェースからコピーされた説明:AuthenticationProvider
このAuthenticationProvider
が指定されたAuthentication
オブジェクトをサポートする場合、true
を返します。true
を返しても、AuthenticationProvider
が提示されたAuthentication
オブジェクトを認証できることは保証されません。これは単に、より詳細な評価をサポートできることを示しているだけです。AuthenticationProvider
は、AuthenticationProvider.authenticate(Authentication)
メソッドからnull
を返して、別のAuthenticationProvider
を試す必要があることを示すことができます。認証を実行できる
AuthenticationProvider
の選択は、実行時にProviderManager
で行われます。- 次で指定:
- インターフェース
AuthenticationProvider
のsupports
- 戻り値:
- 実装が提示された
Authentication
クラスをより厳密に評価できる場合はtrue
createDefaultAssertionValidatorWithParameters(java.util.function.Consumer<java.util.Map<java.lang.String, java.lang.Object>>)
を使用してください