AWS Cognito刷新令牌:如何准确使用它们?

mip*_*pnw 5 amazon-web-services oauth-2.0 amazon-cognito aws-cognito

我有一个应用程序,使用授权代码流从AWS Cognito用户池TOKEN端点获取3个令牌。它收到一个ID_TOKEN,一个ACCESS_TOKEN和一个REFRESH_TOKEN。

该应用使用ID_TOKEN CognitoAWSCredentials在身份池中获取:

var credentials = new CognitoAWSCredentials(IdentityPoolId, Region);
credentials.AddLogin("cognito-idp.<region>.amazonaws.com/<UserPoolId>", ID_TOKEN);
Run Code Online (Sandbox Code Playgroud)

一段时间后,凭证停止工作,并且NotAuthorizedException按预期的那样,在AWS Client上调用任何方法都将引发throws ,令牌将在1小时后失效。

据我了解,当令牌过期时,可以再次使用TOKEN端点并传递REFRESH_TOKEN来获取​​新令牌。这很有用,如果可以避免的话,我宁愿不退出应用程序用户,也不强迫他们再次通过OAUTH身份验证流程。

因此,我尝试将令牌HTTP POST刷新为/oauth2/token与我第一次获得令牌时相同的请求标头,但请求正文稍有不同 ?grant_type=refresh_token&client_id=xxx&refresh_token=xxx

我得到一个ID_TOKEN和ACCESS_TOKEN,但没有REFRESH_TOKEN。

1-这是预期的吗?这是否意味着2个小时后再次刷新使用了相同的REFRESH_TOKEN?还是TOKEN端点有一个微妙的线索让我发现刷新时出了点问题(更好的线索可能是端点返回错误...)

2-仔细检查后,新的ID_TOKEN与旧的ID_TOKEN相同。这是预料之中的,为什么TOKEN端点没有返回新的ID_TOKEN?(当我使用新的ID_TOKEN创建新的CognitoAWSCredentials时,我得到的证书是无用的。当我第一次访问任何AWS Client时,它们都会引发异常。实际上,由于新的ID_TOKEN是旧的,它们已经过期。)

3-我应该使用ACCESS_TOKEN而不是ID_TOKEN,如何使用ACCESS_TOKEN获取CognitoAWSCredentials?

4- CognitoAWSCredentials实际上RefreshingAWSCredentials,那些实际上是自动刷新的,怎么办?

Vla*_*mir 0

刷新令牌用于刷新 id 和访问令牌,有效期仅一小时。您可以在下游服务中使用 id 令牌或访问令牌,尽管 API Gateway 等要求您传入 id 令牌。

当您使用 Cognito 时,您应该使用我们的官方移动 SDK,这样就不用担心刷新令牌,因为它们会为您做这件事。