Cognito 返回无效请求和未授权的客户端。

0

【以下的问题经过翻译处理】 我们尝试使用授权代码从令牌终端获取令牌时,遇到了无效请求和未经授权的响应。我们使用PKCE流程,因此我们设置了两个客户端,一个具有密钥,另一个没有密钥。两个客户端都启用了授权代码流。所有必需的参数都已提供,以查询字符串格式正确地发布在请求正文中,方法已设置为Post,Content-Type已设置,带有密钥的客户端存在授权标头,提供的参数都是正确的,并且与控制台中定义的完全相同。没有双URL编码或类似问题。我们需要知道Cognito发出的日志在哪里,以了解拒绝请求的原因。Lambda中的控制台日志与Cloudwatch一起存在,但它是Cognito提供的响应。那么我们该在哪里查找详细的日志?而尝试使用客户端密钥的原因是要查看是否可以在服务器上隐藏刷新令牌。但是,如果没有密钥的客户端能够响应令牌,则我们准备放弃该路线。

profile picture
专家
已提问 5 个月前19 查看次数
1 回答
0

【以下的回答经过翻译处理】 根据问题的描述,我了解到您正在利用PKCE扩展来保护从您的Cognito域的oauth2/token端点检索token时的授权代码交换。但在这样做的过程中,您遇到了400系列HTTP错误代码,即“Invalid_Grant”和“Invalid Request” 。

发表此答案时,我看到您已经解决了这个问题。对于将来遇到此问题的其他开发人员,我在下面粘贴了通常与上述设置遇到的常见问题(不考虑PKCE扩展/流)的通用问题。

将PKCE扩展/流设置到一边,当您访问Cognito用户池域的/oauth2/token端点并遇到错误消息“invalid_request”时,表示标题/正文中的一个或多个请求参数不正确或缺失。现在,如果重新尝试请求(同时保持“code”请求参数不变),则会遇到“invalid_grant”错误消息,这是可以预期的。授权代码一旦被使用,就不能再次使用。此外,授权代码必须在生成后的5分钟内由token endpoint使用。

在将PKCE扩展引入上述混合时,如果代码验证程序和代码挑战不匹配,则会出现“invalid_request”和“invalid_grant”的相同错误序列。根据RFC标准,代码挑战是从代码验证器字符串以以下方式派生的。

明文 code_challenge = code_verifier

S256 code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))

在上述情况下,只要请求参数'client_id','redirect_uri'和'Authorization'标头(如果您的应用程序客户端具有客户机密)正确,那么此问题的两个

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则