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

获取Bearer Token后调用API返回401未授权,求问题排查

问题排查与修复建议

以下是导致调用目标API返回401 Unauthorized的常见原因及对应修复步骤:

  • RestTemplate GET请求传参错误
    你当前使用restTemplatex.getForObject(urix, String.class, resultx)时,第三个参数resultx(HttpEntity)会被当作URL占位符参数处理,而非请求头。正确做法是使用exchange方法来携带请求头:

    ResponseEntity<String> response = restTemplatex.exchange(
        urix,
        HttpMethod.GET,
        resultx,
        String.class
    );
    String get = response.getBody();
    
  • 目标API URL格式错误
    代码中urix的值是"http:/some-url-that-need-otp-to-access",缺少一个斜杠,应为"http://some-url-that-need-otp-to-access"。URL错误可能导致请求发送到非预期服务,返回401。

  • GET请求无需设置Content-Type
    GET请求没有请求体,设置headersx.setContentType(MediaType.APPLICATION_JSON)属于冗余操作,部分API会因不符合请求规范拒绝访问,建议移除该配置。

  • 未验证Token类型
    并非所有OAuth2返回的token类型都是Bearer,需从token响应中提取token_type字段,再拼接前缀。例如:

    String tokenType = (String) jsonObject.get("token_type");
    headersx.set("Authorization", tokenType + " " + access_token);
    
  • Token权限范围或有效期问题

    1. 检查获取token时是否请求了目标API所需的scope参数,若未指定正确的权限范围,即使token有效也无法访问接口。
    2. 打印完整的token响应,确认expires_in字段,排查token是否已过期。
  • Base64编码字符集不明确
    虽然当前已成功获取token,但notEncoded.getBytes()使用平台默认字符集,可能在不同环境下出现编码不一致问题,建议指定UTF-8编码:

    String encodedAuth = Base64.getEncoder().encodeToString(notEncoded.getBytes(StandardCharsets.UTF_8));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:44:56