importjava.util.Optional;importsample.jpa.entity.authorization.Authorization;importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data.jpa.repository.Query;importorg.springframework.data.repository.query.Param;importorg.springframework.stereotype.Repository;@RepositorypublicinterfaceAuthorizationRepositoryextendsJpaRepository<Authorization,String>{Optional<Authorization>findByState(Stringstate);Optional<Authorization>findByAuthorizationCodeValue(StringauthorizationCode);Optional<Authorization>findByAccessTokenValue(StringaccessToken);Optional<Authorization>findByRefreshTokenValue(StringrefreshToken);Optional<Authorization>findByOidcIdTokenValue(StringidToken);Optional<Authorization>findByUserCodeValue(StringuserCode);Optional<Authorization>findByDeviceCodeValue(StringdeviceCode);@Query("select a from Authorization a where a.state = :token"+" or a.authorizationCodeValue = :token"+" or a.accessTokenValue = :token"+" or a.refreshTokenValue = :token"+" or a.oidcIdTokenValue = :token"+" or a.userCodeValue = :token"+" or a.deviceCodeValue = :token")Optional<Authorization>findByStateOrAuthorizationCodeValueOrAccessTokenValueOrRefreshTokenValueOrOidcIdTokenValueOrUserCodeValueOrDeviceCodeValue(@Param("token")Stringtoken);}
importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.Set;importcom.fasterxml.jackson.core.type.TypeReference;importcom.fasterxml.jackson.databind.Module;importcom.fasterxml.jackson.databind.ObjectMapper;importsample.jpa.entity.client.Client;importsample.jpa.repository.client.ClientRepository;importorg.springframework.security.jackson2.SecurityJackson2Modules;importorg.springframework.security.oauth2.core.AuthorizationGrantType;importorg.springframework.security.oauth2.core.ClientAuthenticationMethod;importorg.springframework.security.oauth2.server.authorization.client.RegisteredClient;importorg.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;importorg.springframework.security.oauth2.server.authorization.jackson2.OAuth2AuthorizationServerJackson2Module;importorg.springframework.security.oauth2.server.authorization.settings.ClientSettings;importorg.springframework.security.oauth2.server.authorization.settings.TokenSettings;importorg.springframework.stereotype.Component;importorg.springframework.util.Assert;importorg.springframework.util.StringUtils;@ComponentpublicclassJpaRegisteredClientRepositoryimplementsRegisteredClientRepository{privatefinalClientRepositoryclientRepository;privatefinalObjectMapperobjectMapper=newObjectMapper();publicJpaRegisteredClientRepository(ClientRepositoryclientRepository){Assert.notNull(clientRepository,"clientRepository cannot be null");this.clientRepository=clientRepository;ClassLoaderclassLoader=JpaRegisteredClientRepository.class.getClassLoader();List<Module>securityModules=SecurityJackson2Modules.getModules(classLoader);this.objectMapper.registerModules(securityModules);this.objectMapper.registerModule(newOAuth2AuthorizationServerJackson2Module());}@Overridepublicvoidsave(RegisteredClientregisteredClient){Assert.notNull(registeredClient,"registeredClient cannot be null");this.clientRepository.save(toEntity(registeredClient));}@OverridepublicRegisteredClientfindById(Stringid){Assert.hasText(id,"id cannot be empty");returnthis.clientRepository.findById(id).map(this::toObject).orElse(null);}@OverridepublicRegisteredClientfindByClientId(StringclientId){Assert.hasText(clientId,"clientId cannot be empty");returnthis.clientRepository.findByClientId(clientId).map(this::toObject).orElse(null);}privateRegisteredClienttoObject(Clientclient){Set<String>clientAuthenticationMethods=StringUtils.commaDelimitedListToSet(client.getClientAuthenticationMethods());Set<String>authorizationGrantTypes=StringUtils.commaDelimitedListToSet(client.getAuthorizationGrantTypes());Set<String>redirectUris=StringUtils.commaDelimitedListToSet(client.getRedirectUris());Set<String>postLogoutRedirectUris=StringUtils.commaDelimitedListToSet(client.getPostLogoutRedirectUris());Set<String>clientScopes=StringUtils.commaDelimitedListToSet(client.getScopes());RegisteredClient.Builderbuilder=RegisteredClient.withId(client.getId()).clientId(client.getClientId()).clientIdIssuedAt(client.getClientIdIssuedAt()).clientSecret(client.getClientSecret()).clientSecretExpiresAt(client.getClientSecretExpiresAt()).clientName(client.getClientName()).clientAuthenticationMethods(authenticationMethods->clientAuthenticationMethods.forEach(authenticationMethod->authenticationMethods.add(resolveClientAuthenticationMethod(authenticationMethod)))).authorizationGrantTypes((grantTypes)->authorizationGrantTypes.forEach(grantType->grantTypes.add(resolveAuthorizationGrantType(grantType)))).redirectUris((uris)->uris.addAll(redirectUris)).postLogoutRedirectUris((uris)->uris.addAll(postLogoutRedirectUris)).scopes((scopes)->scopes.addAll(clientScopes));Map<String,Object>clientSettingsMap=parseMap(client.getClientSettings());builder.clientSettings(ClientSettings.withSettings(clientSettingsMap).build());Map<String,Object>tokenSettingsMap=parseMap(client.getTokenSettings());builder.tokenSettings(TokenSettings.withSettings(tokenSettingsMap).build());returnbuilder.build();}privateClienttoEntity(RegisteredClientregisteredClient){List<String>clientAuthenticationMethods=newArrayList<>(registeredClient.getClientAuthenticationMethods().size());registeredClient.getClientAuthenticationMethods().forEach(clientAuthenticationMethod->clientAuthenticationMethods.add(clientAuthenticationMethod.getValue()));List<String>authorizationGrantTypes=newArrayList<>(registeredClient.getAuthorizationGrantTypes().size());registeredClient.getAuthorizationGrantTypes().forEach(authorizationGrantType->authorizationGrantTypes.add(authorizationGrantType.getValue()));Cliententity=newClient();entity.setId(registeredClient.getId());entity.setClientId(registeredClient.getClientId());entity.setClientIdIssuedAt(registeredClient.getClientIdIssuedAt());entity.setClientSecret(registeredClient.getClientSecret());entity.setClientSecretExpiresAt(registeredClient.getClientSecretExpiresAt());entity.setClientName(registeredClient.getClientName());entity.setClientAuthenticationMethods(StringUtils.collectionToCommaDelimitedString(clientAuthenticationMethods));entity.setAuthorizationGrantTypes(StringUtils.collectionToCommaDelimitedString(authorizationGrantTypes));entity.setRedirectUris(StringUtils.collectionToCommaDelimitedString(registeredClient.getRedirectUris()));entity.setPostLogoutRedirectUris(StringUtils.collectionToCommaDelimitedString(registeredClient.getPostLogoutRedirectUris()));entity.setScopes(StringUtils.collectionToCommaDelimitedString(registeredClient.getScopes()));entity.setClientSettings(writeMap(registeredClient.getClientSettings().getSettings()));entity.setTokenSettings(writeMap(registeredClient.getTokenSettings().getSettings()));returnentity;}privateMap<String,Object>parseMap(Stringdata){try{returnthis.objectMapper.readValue(data,newTypeReference<Map<String,Object>>(){});}catch(Exceptionex){thrownewIllegalArgumentException(ex.getMessage(),ex);}}privateStringwriteMap(Map<String,Object>data){try{returnthis.objectMapper.writeValueAsString(data);}catch(Exceptionex){thrownewIllegalArgumentException(ex.getMessage(),ex);}}privatestaticAuthorizationGrantTyperesolveAuthorizationGrantType(StringauthorizationGrantType){if(AuthorizationGrantType.AUTHORIZATION_CODE.getValue().equals(authorizationGrantType)){returnAuthorizationGrantType.AUTHORIZATION_CODE;}elseif(AuthorizationGrantType.CLIENT_CREDENTIALS.getValue().equals(authorizationGrantType)){returnAuthorizationGrantType.CLIENT_CREDENTIALS;}elseif(AuthorizationGrantType.REFRESH_TOKEN.getValue().equals(authorizationGrantType)){returnAuthorizationGrantType.REFRESH_TOKEN;}returnnewAuthorizationGrantType(authorizationGrantType);// Custom authorization grant type}privatestaticClientAuthenticationMethodresolveClientAuthenticationMethod(StringclientAuthenticationMethod){if(ClientAuthenticationMethod.CLIENT_SECRET_BASIC.getValue().equals(clientAuthenticationMethod)){returnClientAuthenticationMethod.CLIENT_SECRET_BASIC;}elseif(ClientAuthenticationMethod.CLIENT_SECRET_POST.getValue().equals(clientAuthenticationMethod)){returnClientAuthenticationMethod.CLIENT_SECRET_POST;}elseif(ClientAuthenticationMethod.NONE.getValue().equals(clientAuthenticationMethod)){returnClientAuthenticationMethod.NONE;}returnnewClientAuthenticationMethod(clientAuthenticationMethod);// Custom client authentication method}}
importjava.time.Instant;importjava.util.List;importjava.util.Map;importjava.util.Optional;importjava.util.function.Consumer;importcom.fasterxml.jackson.core.type.TypeReference;importcom.fasterxml.jackson.databind.Module;importcom.fasterxml.jackson.databind.ObjectMapper;importsample.jpa.entity.authorization.Authorization;importsample.jpa.repository.authorization.AuthorizationRepository;importorg.springframework.dao.DataRetrievalFailureException;importorg.springframework.security.jackson2.SecurityJackson2Modules;importorg.springframework.security.oauth2.core.AuthorizationGrantType;importorg.springframework.security.oauth2.core.OAuth2AccessToken;importorg.springframework.security.oauth2.core.OAuth2DeviceCode;importorg.springframework.security.oauth2.core.OAuth2RefreshToken;importorg.springframework.security.oauth2.core.OAuth2Token;importorg.springframework.security.oauth2.core.OAuth2UserCode;importorg.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;importorg.springframework.security.oauth2.core.oidc.OidcIdToken;importorg.springframework.security.oauth2.core.oidc.endpoint.OidcParameterNames;importorg.springframework.security.oauth2.server.authorization.OAuth2Authorization;importorg.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;importorg.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;importorg.springframework.security.oauth2.server.authorization.OAuth2TokenType;importorg.springframework.security.oauth2.server.authorization.client.RegisteredClient;importorg.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;importorg.springframework.security.oauth2.server.authorization.jackson2.OAuth2AuthorizationServerJackson2Module;importorg.springframework.stereotype.Component;importorg.springframework.util.Assert;importorg.springframework.util.StringUtils;@ComponentpublicclassJpaOAuth2AuthorizationServiceimplementsOAuth2AuthorizationService{privatefinalAuthorizationRepositoryauthorizationRepository;privatefinalRegisteredClientRepositoryregisteredClientRepository;privatefinalObjectMapperobjectMapper=newObjectMapper();publicJpaOAuth2AuthorizationService(AuthorizationRepositoryauthorizationRepository,RegisteredClientRepositoryregisteredClientRepository){Assert.notNull(authorizationRepository,"authorizationRepository cannot be null");Assert.notNull(registeredClientRepository,"registeredClientRepository cannot be null");this.authorizationRepository=authorizationRepository;this.registeredClientRepository=registeredClientRepository;ClassLoaderclassLoader=JpaOAuth2AuthorizationService.class.getClassLoader();List<Module>securityModules=SecurityJackson2Modules.getModules(classLoader);this.objectMapper.registerModules(securityModules);this.objectMapper.registerModule(newOAuth2AuthorizationServerJackson2Module());}@Overridepublicvoidsave(OAuth2Authorizationauthorization){Assert.notNull(authorization,"authorization cannot be null");this.authorizationRepository.save(toEntity(authorization));}@Overridepublicvoidremove(OAuth2Authorizationauthorization){Assert.notNull(authorization,"authorization cannot be null");this.authorizationRepository.deleteById(authorization.getId());}@OverridepublicOAuth2AuthorizationfindById(Stringid){Assert.hasText(id,"id cannot be empty");returnthis.authorizationRepository.findById(id).map(this::toObject).orElse(null);}@OverridepublicOAuth2AuthorizationfindByToken(Stringtoken,OAuth2TokenTypetokenType){Assert.hasText(token,"token cannot be empty");Optional<Authorization>result;if(tokenType==null){result=this.authorizationRepository.findByStateOrAuthorizationCodeValueOrAccessTokenValueOrRefreshTokenValueOrOidcIdTokenValueOrUserCodeValueOrDeviceCodeValue(token);}elseif(OAuth2ParameterNames.STATE.equals(tokenType.getValue())){result=this.authorizationRepository.findByState(token);}elseif(OAuth2ParameterNames.CODE.equals(tokenType.getValue())){result=this.authorizationRepository.findByAuthorizationCodeValue(token);}elseif(OAuth2ParameterNames.ACCESS_TOKEN.equals(tokenType.getValue())){result=this.authorizationRepository.findByAccessTokenValue(token);}elseif(OAuth2ParameterNames.REFRESH_TOKEN.equals(tokenType.getValue())){result=this.authorizationRepository.findByRefreshTokenValue(token);}elseif(OidcParameterNames.ID_TOKEN.equals(tokenType.getValue())){result=this.authorizationRepository.findByOidcIdTokenValue(token);}elseif(OAuth2ParameterNames.USER_CODE.equals(tokenType.getValue())){result=this.authorizationRepository.findByUserCodeValue(token);}elseif(OAuth2ParameterNames.DEVICE_CODE.equals(tokenType.getValue())){result=this.authorizationRepository.findByDeviceCodeValue(token);}else{result=Optional.empty();}returnresult.map(this::toObject).orElse(null);}privateOAuth2AuthorizationtoObject(Authorizationentity){RegisteredClientregisteredClient=this.registeredClientRepository.findById(entity.getRegisteredClientId());if(registeredClient==null){thrownewDataRetrievalFailureException("The RegisteredClient with id '"+entity.getRegisteredClientId()+"' was not found in the RegisteredClientRepository.");}OAuth2Authorization.Builderbuilder=OAuth2Authorization.withRegisteredClient(registeredClient).id(entity.getId()).principalName(entity.getPrincipalName()).authorizationGrantType(resolveAuthorizationGrantType(entity.getAuthorizationGrantType())).authorizedScopes(StringUtils.commaDelimitedListToSet(entity.getAuthorizedScopes())).attributes(attributes->attributes.putAll(parseMap(entity.getAttributes())));if(entity.getState()!=null){builder.attribute(OAuth2ParameterNames.STATE,entity.getState());}if(entity.getAuthorizationCodeValue()!=null){OAuth2AuthorizationCodeauthorizationCode=newOAuth2AuthorizationCode(entity.getAuthorizationCodeValue(),entity.getAuthorizationCodeIssuedAt(),entity.getAuthorizationCodeExpiresAt());builder.token(authorizationCode,metadata->metadata.putAll(parseMap(entity.getAuthorizationCodeMetadata())));}if(entity.getAccessTokenValue()!=null){OAuth2AccessTokenaccessToken=newOAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER,entity.getAccessTokenValue(),entity.getAccessTokenIssuedAt(),entity.getAccessTokenExpiresAt(),StringUtils.commaDelimitedListToSet(entity.getAccessTokenScopes()));builder.token(accessToken,metadata->metadata.putAll(parseMap(entity.getAccessTokenMetadata())));}if(entity.getRefreshTokenValue()!=null){OAuth2RefreshTokenrefreshToken=newOAuth2RefreshToken(entity.getRefreshTokenValue(),entity.getRefreshTokenIssuedAt(),entity.getRefreshTokenExpiresAt());builder.token(refreshToken,metadata->metadata.putAll(parseMap(entity.getRefreshTokenMetadata())));}if(entity.getOidcIdTokenValue()!=null){OidcIdTokenidToken=newOidcIdToken(entity.getOidcIdTokenValue(),entity.getOidcIdTokenIssuedAt(),entity.getOidcIdTokenExpiresAt(),parseMap(entity.getOidcIdTokenClaims()));builder.token(idToken,metadata->metadata.putAll(parseMap(entity.getOidcIdTokenMetadata())));}if(entity.getUserCodeValue()!=null){OAuth2UserCodeuserCode=newOAuth2UserCode(entity.getUserCodeValue(),entity.getUserCodeIssuedAt(),entity.getUserCodeExpiresAt());builder.token(userCode,metadata->metadata.putAll(parseMap(entity.getUserCodeMetadata())));}if(entity.getDeviceCodeValue()!=null){OAuth2DeviceCodedeviceCode=newOAuth2DeviceCode(entity.getDeviceCodeValue(),entity.getDeviceCodeIssuedAt(),entity.getDeviceCodeExpiresAt());builder.token(deviceCode,metadata->metadata.putAll(parseMap(entity.getDeviceCodeMetadata())));}returnbuilder.build();}privateAuthorizationtoEntity(OAuth2Authorizationauthorization){Authorizationentity=newAuthorization();entity.setId(authorization.getId());entity.setRegisteredClientId(authorization.getRegisteredClientId());entity.setPrincipalName(authorization.getPrincipalName());entity.setAuthorizationGrantType(authorization.getAuthorizationGrantType().getValue());entity.setAuthorizedScopes(StringUtils.collectionToDelimitedString(authorization.getAuthorizedScopes(),","));entity.setAttributes(writeMap(authorization.getAttributes()));entity.setState(authorization.getAttribute(OAuth2ParameterNames.STATE));OAuth2Authorization.Token<OAuth2AuthorizationCode>authorizationCode=authorization.getToken(OAuth2AuthorizationCode.class);setTokenValues(authorizationCode,entity::setAuthorizationCodeValue,entity::setAuthorizationCodeIssuedAt,entity::setAuthorizationCodeExpiresAt,entity::setAuthorizationCodeMetadata);OAuth2Authorization.Token<OAuth2AccessToken>accessToken=authorization.getToken(OAuth2AccessToken.class);setTokenValues(accessToken,entity::setAccessTokenValue,entity::setAccessTokenIssuedAt,entity::setAccessTokenExpiresAt,entity::setAccessTokenMetadata);if(accessToken!=null&&accessToken.getToken().getScopes()!=null){entity.setAccessTokenScopes(StringUtils.collectionToDelimitedString(accessToken.getToken().getScopes(),","));}OAuth2Authorization.Token<OAuth2RefreshToken>refreshToken=authorization.getToken(OAuth2RefreshToken.class);setTokenValues(refreshToken,entity::setRefreshTokenValue,entity::setRefreshTokenIssuedAt,entity::setRefreshTokenExpiresAt,entity::setRefreshTokenMetadata);OAuth2Authorization.Token<OidcIdToken>oidcIdToken=authorization.getToken(OidcIdToken.class);setTokenValues(oidcIdToken,entity::setOidcIdTokenValue,entity::setOidcIdTokenIssuedAt,entity::setOidcIdTokenExpiresAt,entity::setOidcIdTokenMetadata);if(oidcIdToken!=null){entity.setOidcIdTokenClaims(writeMap(oidcIdToken.getClaims()));}OAuth2Authorization.Token<OAuth2UserCode>userCode=authorization.getToken(OAuth2UserCode.class);setTokenValues(userCode,entity::setUserCodeValue,entity::setUserCodeIssuedAt,entity::setUserCodeExpiresAt,entity::setUserCodeMetadata);OAuth2Authorization.Token<OAuth2DeviceCode>deviceCode=authorization.getToken(OAuth2DeviceCode.class);setTokenValues(deviceCode,entity::setDeviceCodeValue,entity::setDeviceCodeIssuedAt,entity::setDeviceCodeExpiresAt,entity::setDeviceCodeMetadata);returnentity;}privatevoidsetTokenValues(OAuth2Authorization.Token<?>token,Consumer<String>tokenValueConsumer,Consumer<Instant>issuedAtConsumer,Consumer<Instant>expiresAtConsumer,Consumer<String>metadataConsumer){if(token!=null){OAuth2TokenoAuth2Token=token.getToken();tokenValueConsumer.accept(oAuth2Token.getTokenValue());issuedAtConsumer.accept(oAuth2Token.getIssuedAt());expiresAtConsumer.accept(oAuth2Token.getExpiresAt());metadataConsumer.accept(writeMap(token.getMetadata()));}}privateMap<String,Object>parseMap(Stringdata){try{returnthis.objectMapper.readValue(data,newTypeReference<Map<String,Object>>(){});}catch(Exceptionex){thrownewIllegalArgumentException(ex.getMessage(),ex);}}privateStringwriteMap(Map<String,Object>metadata){try{returnthis.objectMapper.writeValueAsString(metadata);}catch(Exceptionex){thrownewIllegalArgumentException(ex.getMessage(),ex);}}privatestaticAuthorizationGrantTyperesolveAuthorizationGrantType(StringauthorizationGrantType){if(AuthorizationGrantType.AUTHORIZATION_CODE.getValue().equals(authorizationGrantType)){returnAuthorizationGrantType.AUTHORIZATION_CODE;}elseif(AuthorizationGrantType.CLIENT_CREDENTIALS.getValue().equals(authorizationGrantType)){returnAuthorizationGrantType.CLIENT_CREDENTIALS;}elseif(AuthorizationGrantType.REFRESH_TOKEN.getValue().equals(authorizationGrantType)){returnAuthorizationGrantType.REFRESH_TOKEN;}elseif(AuthorizationGrantType.DEVICE_CODE.getValue().equals(authorizationGrantType)){returnAuthorizationGrantType.DEVICE_CODE;}returnnewAuthorizationGrantType(authorizationGrantType);// Custom authorization grant type}}
importjava.util.HashSet;importjava.util.Set;importsample.jpa.entity.authorizationconsent.AuthorizationConsent;importsample.jpa.repository.authorizationconsent.AuthorizationConsentRepository;importorg.springframework.dao.DataRetrievalFailureException;importorg.springframework.security.core.GrantedAuthority;importorg.springframework.security.core.authority.SimpleGrantedAuthority;importorg.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsent;importorg.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsentService;importorg.springframework.security.oauth2.server.authorization.client.RegisteredClient;importorg.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;importorg.springframework.stereotype.Component;importorg.springframework.util.Assert;importorg.springframework.util.StringUtils;@ComponentpublicclassJpaOAuth2AuthorizationConsentServiceimplementsOAuth2AuthorizationConsentService{privatefinalAuthorizationConsentRepositoryauthorizationConsentRepository;privatefinalRegisteredClientRepositoryregisteredClientRepository;publicJpaOAuth2AuthorizationConsentService(AuthorizationConsentRepositoryauthorizationConsentRepository,RegisteredClientRepositoryregisteredClientRepository){Assert.notNull(authorizationConsentRepository,"authorizationConsentRepository cannot be null");Assert.notNull(registeredClientRepository,"registeredClientRepository cannot be null");this.authorizationConsentRepository=authorizationConsentRepository;this.registeredClientRepository=registeredClientRepository;}@Overridepublicvoidsave(OAuth2AuthorizationConsentauthorizationConsent){Assert.notNull(authorizationConsent,"authorizationConsent cannot be null");this.authorizationConsentRepository.save(toEntity(authorizationConsent));}@Overridepublicvoidremove(OAuth2AuthorizationConsentauthorizationConsent){Assert.notNull(authorizationConsent,"authorizationConsent cannot be null");this.authorizationConsentRepository.deleteByRegisteredClientIdAndPrincipalName(authorizationConsent.getRegisteredClientId(),authorizationConsent.getPrincipalName());}@OverridepublicOAuth2AuthorizationConsentfindById(StringregisteredClientId,StringprincipalName){Assert.hasText(registeredClientId,"registeredClientId cannot be empty");Assert.hasText(principalName,"principalName cannot be empty");returnthis.authorizationConsentRepository.findByRegisteredClientIdAndPrincipalName(registeredClientId,principalName).map(this::toObject).orElse(null);}privateOAuth2AuthorizationConsenttoObject(AuthorizationConsentauthorizationConsent){StringregisteredClientId=authorizationConsent.getRegisteredClientId();RegisteredClientregisteredClient=this.registeredClientRepository.findById(registeredClientId);if(registeredClient==null){thrownewDataRetrievalFailureException("The RegisteredClient with id '"+registeredClientId+"' was not found in the RegisteredClientRepository.");}OAuth2AuthorizationConsent.Builderbuilder=OAuth2AuthorizationConsent.withId(registeredClientId,authorizationConsent.getPrincipalName());if(authorizationConsent.getAuthorities()!=null){for(Stringauthority:StringUtils.commaDelimitedListToSet(authorizationConsent.getAuthorities())){builder.authority(newSimpleGrantedAuthority(authority));}}returnbuilder.build();}privateAuthorizationConsenttoEntity(OAuth2AuthorizationConsentauthorizationConsent){AuthorizationConsententity=newAuthorizationConsent();entity.setRegisteredClientId(authorizationConsent.getRegisteredClientId());entity.setPrincipalName(authorizationConsent.getPrincipalName());Set<String>authorities=newHashSet<>();for(GrantedAuthorityauthority:authorizationConsent.getAuthorities()){authorities.add(authority.getAuthority());}entity.setAuthorities(StringUtils.collectionToCommaDelimitedString(authorities));returnentity;}}