Я следил за официальной справочной документацией Spring Security 5.0 и примерами кодов oauth2login, чтобы настроить аутентификацию OAuth2 / OIDC в моем проекте, но это не удалось, и у меня возникло следующее исключение, когда я загрузил свое приложение с помощью mvn spring-boot:run.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientRegistrationRepository'
defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientRegistrationRepositoryConfiguration.class]:
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException:
Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]:
Factory method 'clientRegistrationRepository' threw exception;
nested exception is java.lang.IllegalArgumentException: authorizationGrantType cannot be null
Я использовал конфигурацию по умолчанию, предоставленную Spring Boot, и просто добавил некоторые базовые зависимости в проекты, такие как spring-security-config, spring-security-oauth2-client, spring-security-oauth2-jsoe и т. д.
Обновлено:
Я нашел причину, для настраиваемых провайдеров OAuth2, таких как Gitlab, мне нужно добавить тип гранта, redirectUritemplate, сфера, имя клиента и т. д., Но в спецификации OpenID Connect есть протокол конечной точки конфигурации, например: https://gitlab.com/.well-known/openid-configuration, возможно ли, чтобы Spring Security считывал эту информацию автоматически?
Обновление (15.05.2021): в последних версиях Spring Security 5.4 и Spring Boot 2.4, конфигурация OpenId (.well-known/openid-configuration) обнаруживается по умолчанию, для большинства серверов авторизации oauth2 / oidc настройте
issuer_uri хватит.
Чтобы подробнее рассказать об обновлении OP выше, свойства, которые необходимо включить в ваш application.yaml для устранения исходной ошибки, показаны ниже, в данном случае для Azure AD (обратите внимание, что это работает ТОЛЬКО с Spring Security 5, а НЕ с Spring Security OAuth2 2.x, чья функциональность сливаются прямо в Spring Security 5):
spring:
security:
oauth2:
client:
registration:
microsoft:
client-id: a935ba7b-6aa4-4b0c-9e84-04f9acaa477b
client-secret: redacted
authorization-grant-type: authorization_code
redirect-uri-template: '{baseUrl}/login/oauth2/code/{registrationId}'
scope: User.Read
client-name: Microsoft
client-alias: microsoft
provider:
microsoft:
authorization-uri: https://login.microsoftonline.com/common/oauth2/authorize?resource=https://graph.microsoft.com/
token-uri: https://login.microsoftonline.com/common/oauth2/token
user-info-uri: https://graph.microsoft.com/v1.0/me
user-name-attribute: sub
jwk-set-uri: https://login.microsoftonline.com/common/discovery/keys
У меня был такой же опыт, но я публикую здесь, чтобы другие точно знали, какие свойства необходимо заполнить полностью
похоже, что в некоторых случаях вы можете использовать эмитент-uri вместо authorization-uri, token-uri, jwk-set-uri и user-info-uri. Я создал собственный поставщик / регистрацию okta (но назвал его test, чтобы Spring не обнаруживал для меня кучу дерьма автоматически), и эмитент-uri фактически работал у меня сам по себе. Jwk-set-uri имеет большую потенциальную потребность в установке иногда независимо от идентификатора-эмитента, хотя я еще не совсем обдумал эту часть того, когда и почему. docs.spring.io/spring-security/site/docs/current/reference/…
шаблон перенаправления uri -> uri перенаправления работает SpringBoot 2.2.0.RELEASE
но он работает spring 2.1.x с redirect-uri-template
используйте redirect-uri вместо redirect-uri-template, если используете SpringBoot v2.2.1 RELEASE
То же самое относится и к версии Spring boot версии 2.2.6.RELEASE. Спасибо!
то же самое применимо в 2.3.2
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.4.5</version>
</dependency>
Добавьте эту зависимость в свой pom и проверьте
Это для устаревших версий Spring Security 4.x и Spring Security Oauth (не рекомендуется).
Я понял это, но я читал документацию, в ней говорилось, что некоторые свойства должны иметь значения по умолчанию, например
redirect-uri-template, но это не относится к конфигурации cusotm.