クラス OidcUserService

java.lang.ObjectSE
org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService
実装されたすべてのインターフェース:
OAuth2UserService<OidcUserRequest,OidcUser>

public class OidcUserService extends ObjectSE implements OAuth2UserService<OidcUserRequest,OidcUser>
OpenID Connect 1.0 プロバイダーをサポートする OAuth2UserService の実装。
導入:
5.0
関連事項:
  • コンストラクターの詳細

    • OidcUserService

      public OidcUserService()
  • メソッドの詳細

    • createDefaultClaimTypeConverters

      public static MapSE<StringSE,org.springframework.core.convert.converter.Converter<ObjectSE,?>> createDefaultClaimTypeConverters()
      OidcUserInfo のクレーム値の型変換に使用されるデフォルト Converter を返します。
      戻り値:
      claim name によってキー設定された ConverterMapSE
      導入:
      5.2
    • loadUser

      public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2AuthenticationException
      インターフェースからコピーされた説明: OAuth2UserService
      UserInfo エンドポイントからエンドユーザーのユーザー属性を取得した後、OAuth2User を返します。
      次で指定:
      インターフェース OAuth2UserService<OidcUserRequest,OidcUser>loadUser 
      パラメーター:
      userRequest - ユーザーリクエスト
      戻り値:
      OAuth2User
      例外:
      OAuth2AuthenticationException - UserInfo エンドポイントからユーザー属性を取得しようとしてエラーが発生した場合
    • setOauth2UserService

      public final void setOauth2UserService(OAuth2UserService<OAuth2UserRequest,OAuth2User> oauth2UserService)
      ユーザー情報リソースをリクエストするときに使用される OAuth2UserService を設定します。
      パラメーター:
      oauth2UserService - ユーザー情報リソースをリクエストするときに使用される OAuth2UserService
      導入:
      5.1
    • setClaimTypeConverterFactory

      public final void setClaimTypeConverterFactory(FunctionSE<ClientRegistration,org.springframework.core.convert.converter.Converter<MapSE<StringSE,ObjectSE>,MapSE<StringSE,ObjectSE>>> claimTypeConverterFactory)
      OidcUserInfo のクレーム値の型変換に使用される Converter を提供するファクトリを設定します。デフォルトは、すべての clientsClaimTypeConverter です。
      パラメーター:
      claimTypeConverterFactory - 特定の client のクレーム値の型変換に使用される Converter を提供するファクトリ
      導入:
      5.2
    • setAccessibleScopes

      @DeprecatedSE(since="6.3", forRemoval=true) public final void setAccessibleScopes(SetSE<StringSE> accessibleScopes)
      非推奨、削除予定: この API 要素は、将来のバージョンで削除される可能性があります。
      代わりに setRetrieveUserInfo(Predicate) を使用してください
      ユーザー情報リソースへのアクセスを許可するスコープを設定します。デフォルトは profileemailaddress および phone です。スコープは、access token に関連付けられた「許可された」スコープに対してチェックされ、ユーザー情報リソースにアクセスできるかどうかが判別されます。少なくとも 1 つの一致がある場合、ユーザー情報リソースがリクエストされますが、そうでない場合はリクエストされません。
      パラメーター:
      accessibleScopes - ユーザー情報リソースへのアクセスを許可するスコープ
      導入:
      5.2
    • setRetrieveUserInfo

      public final void setRetrieveUserInfo(PredicateSE<OidcUserRequest> retrieveUserInfo)
      エンドユーザー (リソース所有者) に関する情報を取得するために UserInfo エンドポイントを呼び出す必要があるかどうかを決定するために使用される Predicate を設定します。

      デフォルトでは、次の条件がすべて満たされる場合に UserInfo エンドポイントが呼び出されます。

      • ユーザー情報エンドポイントは ClientRegistration で定義されます
      • クライアント登録には AuthorizationGrantType.AUTHORIZATION_CODE を使用します
      • アクセストークンには、UserInfo エンドポイント (profileemailaddressphone) へのアクセスが許可された 1 つ以上のスコープが含まれています。または、アクセストークンのスコープが空です。
      パラメーター:
      retrieveUserInfo - UserInfo エンドポイントを呼び出すかどうかを決定するために使用される関数
      導入:
      6.3
    • setOidcUserMapper

      public final void setOidcUserMapper(BiFunctionSE<OidcUserRequest,OidcUserInfo,OidcUser> oidcUserMapper)
      user request および user info から user をマップするために使用される BiFunction を設定します。

      これは、アクセストークン自体からユーザーまたは権限をマップする必要がある場合に便利です。例: 認可サーバーがアクセストークンペイロードで認可情報を提供する場合は、次の操作を実行できます。

              @Bean
              public OidcUserService oidcUserService() {
                      var userService = new OidcUserService();
                      userService.setOidcUserMapper(oidcUserMapper());
                      return userService;
              }
      
              private static BiFunction<OidcUserRequest, OidcUserInfo, OidcUser> oidcUserMapper() {
                      return (userRequest, userInfo) -> {
                              var accessToken = userRequest.getAccessToken();
                              var grantedAuthorities = new HashSet<GrantedAuthority>();
                              // TODO: Map authorities from the access token
                              var userNameAttributeName = "preferred_username";
                              return new DefaultOidcUser(
                                      grantedAuthorities,
                                      userRequest.getIdToken(),
                                      userInfo,
                                      userNameAttributeName
                              );
                      };
              }
       

      次のように、ClientRegistration 経由で userNameAttributeName にアクセスできることに注意してください。

              var userNameAttributeName = userRequest.getClientRegistration()
                      .getProviderDetails()
                      .getUserInfoEndpoint()
                      .getUserNameAttributeName();
       

      デフォルトでは、次のように権限がマップされた DefaultOidcUser が作成されます。

      パラメーター:
      oidcUserMapper - OidcUserOidcUserRequestOidcUserInfo からマッピングするために使用される関数
      導入:
      6.3