AuthorizationGrantType не может иметь значение null в Spring Security 5 OAuth Client и Spring Boot 2.0

Я следил за официальной справочной документацией 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 хватит.

11
0
10 176
4

Ответы 4

Чтобы подробнее рассказать об обновлении 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

Я понял это, но я читал документацию, в ней говорилось, что некоторые свойства должны иметь значения по умолчанию, например redirect-uri-template, но это не относится к конфигурации cusotm.

Hantsy 05.04.2018 05:39

У меня был такой же опыт, но я публикую здесь, чтобы другие точно знали, какие свойства необходимо заполнить полностью

Stewart Adam 12.04.2018 17:51

похоже, что в некоторых случаях вы можете использовать эмитент-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/…

Brent Thoenen 23.10.2019 17:57

шаблон перенаправления 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. Спасибо!

Omar.Nassar 18.04.2020 12:49

то же самое применимо в 2.3.2

Nischal Revooru 25.08.2020 14:09
    <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 (не рекомендуется).

Hantsy 08.05.2021 05:17

Другие вопросы по теме