Spring Security + Google OAuth2 登录:访问令牌为空?

Posted

技术标签:

【中文标题】Spring Security + Google OAuth2 登录:访问令牌为空?【英文标题】:Spring Security + Google OAuth2 Login: access token is null? 【发布时间】:2019-04-19 09:56:17 【问题描述】:

我从默认的 Spring Security OAuth2 登录实现中收到此错误(不使用 Spring Boot):

[invalid_token_response] 尝试检索 OAuth 2.0 访问令牌响应时出错:提取类型 [class org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse] 和内容类型 [application/json;字符集=utf-8];嵌套异常是 org.springframework.http.converter.HttpMessageNotReadableException:读取 OAuth 2.0 访问令牌响应时出错:null;嵌套异常是 java.lang.NullPointerException

screenshot here

情节是:我去任何受保护的页面,它重定向到谷歌“选择一个帐户”的东西,我选择了这个帐户然后砰,重定向到 /login?error 显示上面提到的文本。

Spring 安全配置:

@Configuration
@EnableWebSecurity()
@PropertySource("classpath:application.properties")
public class SecurityConfiguration extends WebSecurityConfigurerAdapter    

    @Override
    protected void configure(HttpSecurity http) throws Exception       
        http    
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/tlog/**").authenticated()                
            .and().oauth2Login();
    

    @Bean
    public OAuth2AuthorizedClientService authorizedClientService()       
        return new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepository());
    

    @Bean
    public OAuth2AuthorizedClientRepository authorizedClientRepository(OAuth2AuthorizedClientService authorizedClientService) 
        return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(authorizedClientService);
    


    @Bean
    public ClientRegistrationRepository clientRegistrationRepository()         
        return new InMemoryClientRegistrationRepository(googleClientRegistration());        
       

    private ClientRegistration googleClientRegistration() 
        return CommonOAuth2Provider.GOOGLE.getBuilder("google")
            .clientId("XXX")
            .clientSecret("ZZZ")
            .build();
    


我在这里缺少什么?找不到任何不使用 Spring Boot 的体面教程,这实际上会有所帮助。

【问题讨论】:

我有同样的问题,但 jackson-databind 没有解决它。你最后成功了吗? (任何帮助表示赞赏) 是的,它确实有效,但在我的情况下,问题只是 - 杰克逊依赖。 【参考方案1】:

我遇到了同样的问题。杰克逊依赖解决了它。

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

【讨论】:

以上是关于Spring Security + Google OAuth2 登录:访问令牌为空?的主要内容,如果未能解决你的问题,请参考以下文章

Grails 通过 Spring Security 插件使用 Google 身份验证

Apache Oltu Spring Security OAuth2 和 Google 集成

如何使用 spring security 和 spring boot 对 Google 用户进行身份验证,将 mongoDB 作为存储库?

Spring Security + Google OAuth2 登录:访问令牌为空?

重定向循环中的 Spring Security OAuth2 (google) web 应用程序

如何配置 Spring Boot 和 Spring Security 以支持表单登录和 Google OAuth2 登录