在 Angular 5 中从 AWS Cognito 刷新 JWT 令牌?
Refresh JWT token from AWS Cognito in Angular 5?
我正在通过 aws sdk cognito .net sdk 在 amazon cognito 中创建用户。当用户登录时,他们会取回 3 个令牌(IdToken、AccessToken 和 RefreshToken)。 IdToken 有效期为 1 小时。目前,当令牌过期时,用户将被重定向到登录页面。我想做的是在收到 403 返回时发送 RefreshToken,但我不确定如何在 angular 应用程序中执行此操作?
我还假设这是我会在客户端而不是服务器端处理的事情 (.net web api)?
我目前在我的路线上有警卫从我的服务中调用以下功能:
loggedIn() {
return tokenNotExpired('token');
}
以下有效,但问题是我必须使用我的 AccessKey
和 SecretKey
:
refreshToken(){
AWS.config.update({credentials:{accessKeyId:'access_id',secretAccessKey:'secret'}, region:'us-east-2'});
const myCreds = new AWS.CognitoIdentityCredentials({IdentityPoolId:'us-east-2:identity_pool_id},{region:'us-east-2'});
const myConfig = new AWS.Config({credentials: myCreds, region: 'us-east-2'});
const refreshToken = JSON.parse(localStorage.getItem('rToken'));
const cognitoisp = new CognitoIdentityServiceProvider();
const params = {
AuthFlow: 'REFRESH_TOKEN',
ClientId: 'client_id',
UserPoolId: 'user_pool_id',
AuthParameters: {
'REFRESH_TOKEN': refreshToken
}
}
cognitoisp.adminInitiateAuth(params,(err,data)=>{
if(err) console.log(err,err.stack);
else
{
this.token = data.AuthenticationResult.IdToken;
localStorage.setItem('lcToken',JSON.stringify(this.token));
}
})
}
你的想法是正确的,一旦你获得 4xx 状态,你就可以使用刷新令牌来获取一组新的令牌。 JavaScript 中的代码是这样的:
const AWS = require('aws-sdk')
const cognitoisp = new AWS.CognitoIdentityServiceProvider();
var params = {
AuthFlow: 'REFRESH_TOKEN',
ClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
UserPoolId: 'region_xxxxxxxx',
AuthParameters: {
'REFRESH_TOKEN': 'xxxxxxxxxxxxxxxxxxxxx'
}
}
cognitoisp.adminInitiateAuth(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
我正在通过 aws sdk cognito .net sdk 在 amazon cognito 中创建用户。当用户登录时,他们会取回 3 个令牌(IdToken、AccessToken 和 RefreshToken)。 IdToken 有效期为 1 小时。目前,当令牌过期时,用户将被重定向到登录页面。我想做的是在收到 403 返回时发送 RefreshToken,但我不确定如何在 angular 应用程序中执行此操作?
我还假设这是我会在客户端而不是服务器端处理的事情 (.net web api)?
我目前在我的路线上有警卫从我的服务中调用以下功能:
loggedIn() {
return tokenNotExpired('token');
}
以下有效,但问题是我必须使用我的 AccessKey
和 SecretKey
:
refreshToken(){
AWS.config.update({credentials:{accessKeyId:'access_id',secretAccessKey:'secret'}, region:'us-east-2'});
const myCreds = new AWS.CognitoIdentityCredentials({IdentityPoolId:'us-east-2:identity_pool_id},{region:'us-east-2'});
const myConfig = new AWS.Config({credentials: myCreds, region: 'us-east-2'});
const refreshToken = JSON.parse(localStorage.getItem('rToken'));
const cognitoisp = new CognitoIdentityServiceProvider();
const params = {
AuthFlow: 'REFRESH_TOKEN',
ClientId: 'client_id',
UserPoolId: 'user_pool_id',
AuthParameters: {
'REFRESH_TOKEN': refreshToken
}
}
cognitoisp.adminInitiateAuth(params,(err,data)=>{
if(err) console.log(err,err.stack);
else
{
this.token = data.AuthenticationResult.IdToken;
localStorage.setItem('lcToken',JSON.stringify(this.token));
}
})
}
你的想法是正确的,一旦你获得 4xx 状态,你就可以使用刷新令牌来获取一组新的令牌。 JavaScript 中的代码是这样的:
const AWS = require('aws-sdk')
const cognitoisp = new AWS.CognitoIdentityServiceProvider();
var params = {
AuthFlow: 'REFRESH_TOKEN',
ClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
UserPoolId: 'region_xxxxxxxx',
AuthParameters: {
'REFRESH_TOKEN': 'xxxxxxxxxxxxxxxxxxxxx'
}
}
cognitoisp.adminInitiateAuth(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});