Я разрабатываю приложение, которое использует поддержку OAuth2 в Spring Security 5.x для входа в систему. Один из моих вариантов использования требует наличия нескольких клиентских регистраций для одного и того же провайдера идентификации OAuth2, а затем поиск идентификатора провайдера во время выполнения по объекту ClientRegistration
, соответствующему клиенту OAuth2 в области применения. Существует ли публичный API, предоставляющий эту информацию?
API ClientRegistration
: https://docs.spring.io/spring-security/site/docs/5.1.5.RELEASE/api/org/springframework/security/oauth2/client/registration/ClientRegistration.html не предоставляет эту информацию.
Я надеялся, что ProviderDetails
: https://docs.spring.io/spring-security/site/docs/5.1.5.RELEASE/api/org/springframework/security/oauth2/client/registration/ClientRegistration.ProviderDetails.html включит его, но не повезло.
Я использую Spring Boot 2.x с конфигурацией YAML. Значение ключа provider
в регистрационных данных клиента равно точно , что мне нужно для доступа во время выполнения:
spring:
security:
oauth2:
provider:
myprovider:
authorization-uri: "https://oauth2.example.com/authorize"
jwk-set-uri: "https://oauth2.example.com/jwks.json"
token-uri: "https://oauth2.example.com/tokens"
registration:
client1:
provider: "myprovider"
client-id: "id-1"
client-secret: "secret-1"
authorization-grant-type: "authorization_code"
client2:
provider: "myprovider"
client-id: "id-2"
client-secret: "secret-2"
authorization-grant-type: "authorization_code"
Это кажется странным упущением (и, очевидно, оно доступно для Spring Security внутри страны), поэтому я остаюсь почесывая голову и спрашиваю себя, упускаю ли я что-то очевидное.
Я предполагал, что смогу написать что-то вроде этого:
ClientRegistration registration = someObject.getClientRegistration();
String providerId = registration.getProviderId();
Но я не могу найти ничего эквивалентного #getProviderId()
выше или даже ProviderRepository
, аналогичного бобу ClientRegistrationRepository
.