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

使用/authorize、/oauth/token获取access_token访问自定义API报403如何解决

问题根因与解决方案

你遇到的403问题基本是以下几个配置遗漏导致的,按优先级排查即可:

1. 申请Access Token时未携带audience参数(最高概率)

你在跳转到Auth0 /authorize 端点请求授权时,必须额外携带 audience 参数,参数值为你在Auth0后台创建自定义API时填写的API Identifier。如果缺失该参数,Auth0返回的Access Token是仅适用于Auth0自有/userinfo接口的 opaque token 或者受众不符的JWT,无法通过你自定义后端的校验,直接返回403。

2. 自定义AuthTokenFilter未完成合法认证信息注入

你配置的自定义AuthTokenFilter只实现了授权码换Token的逻辑,大概率缺失请求携带Access Token的校验流程,需要补充以下逻辑:

  • 从请求头提取Authorization字段,校验格式为Bearer {token},取出Token值
  • 验证Token的签名有效性、签发者(iss固定为https://<你的Auth0域名>/)、受众(aud为前述audience值)、过期时间等核心字段
  • 验证通过后,构造合法的认证对象(如UsernamePasswordAuthenticationToken)注入到SecurityContextHolder中,Spring Security才会识别为已认证用户

如果不想自行维护Filter逻辑,推荐直接使用Spring官方OAuth2资源服务器依赖,避免自定义逻辑出错:

  1. 引入依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
  1. 新增配置:
spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://<你的Auth0域名>/
          audiences: <你的自定义API Identifier>
  1. 在SecurityConfig的configure方法中添加JWT校验配置即可,无需自定义Filter:
http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt);

3. 授权规则匹配逻辑错误

你当前的authorizeRequests配置拆分了两次,且未兜底所有请求的规则,Spring Security对未匹配到规则的请求默认拒绝访问,会触发403。调整为统一的规则配置:

http.authorizeRequests()
    // 所有公开路径统一放最前面
    .antMatchers("/app/cfg/ext/**", LOGIN_URL).permitAll()
    // 自定义需认证路径
    .antMatchers("/user").authenticated()
    // 兜底规则:其余所有请求均需认证
    .anyRequest().authenticated();

4. 校验Token传输格式

确认请求头的格式为Authorization: Bearer <Access Token>,注意Bearer与Token之间必须有空格,且Bearer首字母大写。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:02