当我使用curl 与flutter 进行相同的http 调用时,为什么我的JWT 令牌不同?

问题描述 投票:0回答:1

我有一个带有 AWS Lambda 的 C# 后端。我的后端有一个功能,可以使用 AWS cognito 对用户进行身份验证,并通过响应正文发回 IDToken 响应:

return Ok(idToken);

我用flutter和curl调用完全相同的http请求,但响应不同。

这是flutter中的请求:

final requestBody =
    jsonEncode({"Username": "Myusername", "Password": "Mysecretpassword"});
final request = await http.post(
    Uri.parse(
        "https://myAWSLink/signin"),
    headers: {'Content-Type': 'application/json'},
    body: requestBody);

这是curl中的请求:

curl -X POST "https://myAWSLink/signin" \
-H "Content-Type: application/json" \
-d '{
  "Username": "myusername",
  "Password": "Mysecretpassword"
}'

如您所见,它们都有相同的链接、标头和正文,但响应不同。 curl 命令的响应有 1063 个字符长度,但我的 flutter 应用程序的响应只有 1023 个字符长度。因此,当我尝试发送 IDToken 来验证我的 API 时,它不能与 Flutter 响应配合使用,但可以与 curl 响应配合使用。

Flutter 在收到 IDtoken 时似乎跳过了某些字符。为什么会发生这种情况?如何让 flutter 响应与 Curl 的响应相匹配?

http jwt token amazon-cognito
1个回答
0
投票

事实证明,该请求实际上接收了整个 1063 个字符数的 IDToken,但问题是我试图使用

debugPrint(IDToken)
打印整个 IDToken,而 flutter 允许您在一条语句中打印的最大字符限制是 1023。超过 1023 个字符,它会截断 1023 个限制之后的任何内容。这就是我修复它的方法:

// print the first 200 characters of the token:
debugPrint(request.body.substring(0, 200));
// print the remaining characters
debugPrint(request.body.substring(200));
© www.soinside.com 2019 - 2024. All rights reserved.