【发布时间】:2018-04-03 10:36:15
【问题描述】:
我将Amazon Cognito 服务与amazon-cognito-identity-js 库一起使用,但在刷新用户令牌(即id 令牌)时遇到问题。
当尝试通过发出未经身份验证的 initiateAuth 请求来刷新用户令牌时,我收到 400 http 状态作为响应,以及“无效的刷新令牌”错误消息。
POST https://cognito-idp.us-east-1.amazonaws.com/ 400(错误请求)
未捕获的错误:无效的刷新令牌。
为什么它认为我传入了无效的刷新令牌?
// the refresh token
var reToken;
// pool config
var poolData = {
UserPoolId : 'us-east-1_XXXXXXXXX',
ClientId : 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
};
// connect to user pool and
// find the current user
var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var cognitoUser = userPool.getCurrentUser();
// if we found a user
if (cognitoUser != null)
{
// get active user session
cognitoUser.getSession(function(err, session)
{
// catch errors
if (err) {
alert(err);
return;
}
// get the refresh token
reToken = session.refreshToken.token;
});
}
// get current epoch time
var curDate = new Date();
var currentEpoch = Math.round(curDate.getTime() / 1000);
// get the epoch when the token
// was last issued
var issuedEpoch = store.get('issued');
// set the refresh parameters
var refreshParams = {
ClientId: 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
AuthFlow: 'REFRESH_TOKEN_AUTH',
AuthParameters: { 'REFRESH_TOKEN': reToken }
};
// note: 30 minutes = 1800 seconds
// if a token was last issued over 30 minutes ago
if ( (currentEpoch - issuedEpoch) >= 1800 )
{
// refresh the users token with a new token
userPool.client.makeUnauthenticatedRequest('initiateAuth', refreshParams, (err, newToken) => {
// catch errors
if (err) {
alert(err);
return;
}
// do stuff with the returned token
console.log(newToken)
})
}
顺便说一句,我尝试过使用 refreshSession(),但它告诉我 getToken() 不是 refreshSession() 的函数。
cognitoUser.refreshSession(reToken, (err, authResult) => {
if (err) throw err;
console.log(authResult)
});
【问题讨论】:
标签: javascript amazon-web-services amazon-cognito