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
などのいくつかの基本的な依存関係をプロジェクトに追加しました。
更新:
理由を見つけました、GitlabなどのカスタムOAuth2プロバイダーの場合、追加する必要があります付与タイプ、redirectUritemplate、scope、clientNameなどですが、OpenID Connect仕様には構成エンドポイントプロトコルがあります。例: https://gitlab.com/.well-known/openid-configuration 、Spring Securityでこれらの情報を自動的に読み取るようにすることは可能ですか?
上記の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
springBoot v2.2.1を使用する場合は、redirect-uri-templateではなく、redirect-uriを使用してください。
redirect-uri-template-> redirect-uri機能しますSpringBoot 2.2.0.RELEASE
しかし、それはredirect-uri-templateで春2.1.xで動作します