【发布时间】:2018-08-25 05:08:43
【问题描述】:
我按照 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,我必须添加grant type, redirectUritemplate、scope、clientName等,但是OpenID Connect规范有一个配置端点协议,例如:https://gitlab.com/.well-known/openid-configuration,有没有可能让Spring Security读取这个自动获取信息?
更新(5/15/2021):在最新的 Spring Security 5.4 和 Spring Boot 2.4 中,默认发现 OpenId 配置 (.well-known/openid-configuration),对于大多数 oauth2/oidc 授权服务器,配置一个
issuer_uri 就够了。
【问题讨论】:
标签: spring spring-boot spring-security oauth-2.0 openid-connect