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

使用Spring Security实现OAuth 2.0:获取令牌后无法访问接口

解决OAuth2令牌获取成功但访问受保护接口报错的问题

看起来你已经通过密码模式成功拿到了OAuth2令牌,但访问/test/0端点时遇到了错误。先确认你的令牌获取流程是完全没问题的:

正确的令牌获取请求细节

  • 请求方式:POST http://localhost:8090/oauth/token
  • 请求头:Authorization: Basic Y2xpZW50OnF3ZXJ0eQ==(对应客户端账户client/qwerty)
  • 请求参数:
    • username=user
    • password=123
    • grant_type=password
  • 成功返回的令牌:
{
  "access_token": "6595cfb6-e79c-4110-adc1-eb5e0926bd74",
  "token_type": "bearer",
  "refresh_token": "2036efc5-b1a9-4d50-9fc8-4c0746737732",
  "expires_in": 299,
  "scope": "read write trust"
}

接下来针对访问报错的情况,给你几个最常见的排查方向:

1. 确认请求头是否正确携带令牌

访问受保护接口时,必须在请求头中添加Authorization字段,格式为:

Authorization: Bearer 6595cfb6-e79c-4110-adc1-eb5e0926bd74

划重点:Bearer后面必须跟一个空格,然后是你的access_token。很多人会遗漏这个空格,或者错误地使用token_type里的小写bearer(虽然大部分服务端不区分大小写,但严格遵循规范能避免不必要的问题)。

2. 检查令牌是否已过期

你的expires_in是299秒(约5分钟),如果获取令牌后过了这个时间再访问接口,令牌就会失效。此时需要用refresh_token重新获取新的access_token,请求方式同样是POST /oauth/token,参数改为:

  • grant_type=refresh_token
  • refresh_token=2036efc5-b1a9-4d50-9fc8-4c0746737732
  • 同样需要携带客户端的Basic认证头

3. 验证令牌的权限范围是否匹配

你的令牌拥有read write trust的scope,需要确认/test/0这个接口是否要求了额外的权限(比如admin)。如果接口的权限要求不在你的令牌scope内,服务端会返回权限不足的错误。

4. 检查请求URL和其他细节

确认访问的URL是http://localhost:8090/test/0,没有拼写错误(比如端口号、路径中的test或0是否正确)。另外,确保请求方式(GET/POST)和接口要求一致。

5. 查看完整的错误响应内容

你只提供了错误的timestamp部分,完整的错误响应里通常会包含error和error_description字段,比如:

{
"timestamp": 1523824850474,
"status": 401,
"error": "Unauthorized",
"error_description": "Invalid token: ..."
}
这些字段能直接告诉你问题的根源,比如expired_token表示令牌过期,invalid_token表示令牌格式错误或无效,insufficient_scope表示权限不足。

如果排查完这些还是解决不了,可以把完整的错误响应贴出来,我再帮你进一步分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:00:29