SUUNTO API OAuth2第二步获取JWT返回401未授权问题如何解决?
问题根因
你的代码存在两处不符合Suunto OAuth2接口要求的错误:
- Basic认证头格式错误:
Authorization字段中Basic后多了多余的冒号,OAuth2标准Basic认证格式为Authorization: Basic <base64编码的clientId:secret>,不需要加冒号 - 不支持将请求参数拼接在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
相关产品推荐
相关产品推荐

