クラス OpenSaml4AuthenticationProvider

java.lang.ObjectSE
org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider
実装されたすべてのインターフェース:
AuthenticationProvider

public final class OpenSaml4AuthenticationProvider extends ObjectSE implements 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
関連事項:
  • コンストラクターの詳細

  • メソッドの詳細

    • setResponseElementsDecrypter

      public void setResponseElementsDecrypter(ConsumerSE<OpenSaml4AuthenticationProvider.ResponseToken> responseElementsDecrypter)
      検証済みの Response の要素を復号化するために使用する ConsumerSE 戦略を設定します。デフォルトの戦略では、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 - レスポンス要素を復号化するための ConsumerSE
      導入:
      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 の要素を復号化するために使用する ConsumerSE 戦略を設定します。この方法を使用して、次のように使用される 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 - アサーション要素を解読するための ConsumerSE
      導入:
      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

      public Authentication authenticate(Authentication authentication) throws AuthenticationException
      インターフェースからコピーされた説明: AuthenticationProvider
      AuthenticationManager.authenticate(Authentication) と同じ契約で認証を実行します。
      次で指定:
      インターフェース AuthenticationProviderauthenticate 
      パラメーター:
      authentication - 認証リクエストオブジェクト。Saml2AuthenticationToken 型である必要があります
      戻り値:
      Saml2Authentication(アサーションが有効な場合)
      例外:
      AuthenticationException - 検証例外が発生した場合
    • supports

      public boolean supports(ClassSE<?> authentication)
      インターフェースからコピーされた説明: AuthenticationProvider
      この AuthenticationProvider が指定された Authentication オブジェクトをサポートする場合、true を返します。

      true を返しても、AuthenticationProvider が提示された Authentication オブジェクトを認証できることは保証されません。これは単に、より詳細な評価をサポートできることを示しているだけです。AuthenticationProvider は、AuthenticationProvider.authenticate(Authentication) メソッドから null を返して、別の AuthenticationProvider を試す必要があることを示すことができます。

      認証を実行できる AuthenticationProvider の選択は、実行時に ProviderManager で行われます。

      次で指定:
      インターフェース AuthenticationProvidersupports 
      戻り値:
      実装が提示された Authentication クラスをより厳密に評価できる場合は true