Flutter中带JWT Bearer Token的GET请求返回401错误如何解决?
Flutter请求ASP.NET Core API返回401授权问题修复方案
我需要向ASP.NET Core API发送JWT Bearer Token完成授权,编写了如下Flutter代码:
// get请求方法 Future<dynamic> get(String api) async { var url = Uri.parse(baseUrl + api); String? token = await SecureStorage().readSecureStorage('token'); var headers = { "Content-Type": "application/json", "Accept": "application/json", "Authorization": "Bearer $token" }; var response = await http.get(url, headers: headers); if (response.statusCode == 200) { return response; } else { print(token); // 抛出异常 } }
但测试该代码时,响应状态码始终为401,该如何修复?
更新:已解码JWT Token内容
Header:
{ "alg": "http://www.w3.org/2001/04/xmldsig-more#hmac-sha512", "typ": "JWT" }
Payload:
{ "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "alex2020", "http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "developer", "UserId": "5", "exp": 1682964030 }
排查修复步骤
- 检查Token是否过期:Payload中的
exp字段是时间戳(1682964030对应2023年5月1日左右),如果当前时间已超过该值,Token已失效,需要重新获取 - 验证Token完整性:打印出来的
token必须是完整的三段式字符串(由.分隔的header、payload、signature),确认没有空格、截断或额外字符,同时确保token不为null(如果读取失败,会变成Bearer null导致授权失败) - 核对后端JWT配置:
- 确认ASP.NET Core后端配置的签名算法与Token的
alg一致(即HMAC-SHA512) - 检查后端是否开启了Audience/Issuer验证,确保生成Token时的参数与后端配置匹配
- 若后端要求HTTPS,本地测试需确认是否正确配置了HTTPS,或临时禁用HTTPS验证(仅测试环境)
- 确认ASP.NET Core后端配置的签名算法与Token的
- 检查请求头格式:
Authorization头必须严格遵循Bearer(注意空格)+ Token的格式,确保代码中"Bearer $token"的空格正确 - 用Postman交叉验证:将相同的Token放入Postman的Bearer Token授权栏,调用同一个API。若Postman也返回401,问题出在Token或后端配置;若Postman成功,则排查Flutter代码的请求头构造逻辑
内容的提问来源于stack exchange,提问作者Alex Wright
相关产品推荐
相关产品推荐

