You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot OAuth2客户端:Postman无法访问受保护URL(Google认证)

问题分析与解决方案

你遇到的核心问题是:Spring Boot的oauth2-client依赖默认只适配浏览器端的OAuth2授权码流程,而Postman直接通过Authorization头传递Token的方式,属于资源服务器的Bearer Token认证模式,默认配置没开启对这种模式的支持,所以服务器还是会触发授权跳转,返回Google登录页。

下面是具体的解决步骤:

1. 添加资源服务器依赖

在pom.xml(Maven)或build.gradle(Gradle)中加入oauth2-resource-server依赖,让Spring支持Bearer Token的验证:

Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

Gradle:

implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'

2. 调整安全配置,同时支持两种认证模式

修改你的Spring Security配置类,让它同时兼容浏览器的授权码登录和Postman的Bearer Token认证:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            // 支持浏览器的OAuth2授权码流程
            .oauth2Login(oauth2 -> oauth2
                .loginPage("/oauth2/authorization/google")
            )
            // 支持Bearer Token认证(适配Postman等工具)
            .oauth2ResourceServer(oauth2 -> oauth2
                .opaqueToken(token -> token
                    // Google的不透明令牌验证端点
                    .introspectionUri("https://oauth2.googleapis.com/tokeninfo")
                    .introspectionClientCredentials("<你的Google客户端ID>", "<你的Google客户端密钥>")
                )
            );
        return http.build();
    }
}

3. 配置应用属性(application.yml/application.properties)

确保你的OAuth2客户端配置正确,同时指定资源服务器的令牌验证信息:

application.yml:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: <你的Google客户端ID>
            client-secret: <你的Google客户端密钥>
            scope: openid,email,profile
        provider:
          google:
            issuer-uri: https://accounts.google.com

关键说明

  • 浏览器访问时,Spring会走OAuth2授权码流程,登录成功后创建会话并通过Cookie维护身份,所以请求带Cookie就能通过认证。
  • Postman请求时,你需要先通过Google的OAuth2端点获取access_token,然后在请求头中添加Authorization: Bearer <你的access_token>,此时Spring会通过资源服务器的逻辑去验证这个令牌的有效性。
  • 如果你想用JWT令牌而非不透明令牌,需要在Google开发者控制台中配置,让Google颁发JWT格式的access_token,同时在安全配置中把opaqueToken换成jwt,并配置JWT的验证逻辑:
    .oauth2ResourceServer(oauth2 -> oauth2
        .jwt(jwt -> jwt
            .issuerUri("https://accounts.google.com")
        )
    )
    

内容的提问来源于stack exchange,提问作者Ezio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:21:13