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

SUUNTO API OAuth2第二步获取JWT返回401未授权问题如何解决?

问题根因

你的代码存在两处不符合Suunto OAuth2接口要求的错误:

  1. Basic认证头格式错误:Authorization字段中Basic后多了多余的冒号,OAuth2标准Basic认证格式为Authorization: Basic <base64编码的clientId:secret>,不需要加冒号
  2. 不支持将请求参数拼接在URL后:Suunto的token接口仅支持application/x-www-form-urlencoded格式的请求体传参,不支持GET式的URL参数拼接,你之前调整为表单提交但未同时修正认证头,所以仍然报错

修正后代码示例

const REDIRECT_URL = "suuntoflutter://redirect/";

Future<SuuntoToken> _getSuuntoToken(
  String clientId,
  String secret,
  String code,
) async {
  final tokenRequestUrl = "https://cloudapi-oauth.suunto.com/oauth/token";
  final base64String = base64.encode(utf8.encode("$clientId:$secret"));
  final tokenResponse = await http.post(
    Uri.parse(tokenRequestUrl),
    headers: {
      "Authorization": "Basic $base64String", // 移除Basic后的多余冒号
      "Content-Type": "application/x-www-form-urlencoded"
    },
    // 参数统一放在请求体中,http库会自动处理表单编码
    body: {
      "grant_type": "authorization_code",
      "code": code,
      "redirect_uri": REDIRECT_URL
    }
  );
  // 后续添加响应解析逻辑
}

补充校验点

如果修正后仍报错,请依次确认以下配置:

  • 授权码code获取后立即使用,不可重复使用,Suunto授权码有效期仅为5分钟
  • REDIRECT_URL与你在Suunto API Zone后台注册的回调地址完全一致,包括末尾的斜杠、大小写都要完全匹配
  • 确认你的开发者订阅未过期,且对应API权限已在控制台开启

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:15:02