AWS Cognito Refresh Tokens:如何准确使用它们?

时间:2018-04-19 19:01:25

标签: 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);

一段时间后,凭据就会停止工作,并且调用AWS Client上的任何方法会抛出NotAuthorizedException,正如预期的那样,令牌会在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,那些实际上是自动刷新的,怎么做?

1 个答案:

答案 0 :(得分:0)

Refresh tokens are used to refresh the id and access tokens, which are only valid for an hour. You can use the id token or the access token in your downstream services, although API Gateway, for example, requires you to pass in the id token.

And you should be using our official mobile SDKs when you're working with Cognito so as not to worry about refreshing tokens, since they will do that for you.