angular - 在 Angular 5 中从 AWS Cognito 刷新 JWT token ?

标签 angular amazon-cognito

我正在通过 aws sdk cognito .net sdk 在 amazon cognito 中创建用户。当用户登录时,他们会取回 3 个 token (IdToken、AccessToken 和 RefreshToken)。 IdToken 的有效期为 1 小时。目前,当 token 过期时,用户将被重定向到登录页面。我想做的是在收到 403 返回时发送 RefreshToken,但我不确定如何在 Angular 应用程序中执行此操作?

我还假设这是我在客户端而不是服务器端(.net web api)处理的事情?

目前,我的路线上有 guard 从我的服务中调用以下函数:

 loggedIn() {
    return tokenNotExpired('token');
  }

以下方法有效,但问题是我必须使用我的 AccessKeySecretKey:

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 状态,你就可以使用刷新 token 来获取一组新的 token 。 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
});

文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#adminInitiateAuth-property

关于angular - 在 Angular 5 中从 AWS Cognito 刷新 JWT token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48791631/

相关文章:

amazon-web-services - AWS CloudFormation 脚本失败 - Cognito 不允许使用您的电子邮件身份

angular - 类型 'Moment' 不可分配给类型 'Date' 。类型 'toDateString' 中缺少属性 'Moment'

angular - 指令中的主机属性是什么以及如何知道这些细节

angular - 我的 NgRx 效果不工作,没有任何反应

angular - 放大和 Angular 安全关注 - Cognito

ios - AWS Cognito 身份空

javascript - 自动登录子域 Amazon Cognito Identity

javascript - 如何使用模拟 Firebase 进行 Angular 2 TypeScript 单元测试?

angular - Gitlab CI 构建不工作

aws-cloudformation - 使用 Cloudformation 时如何防止 AWS Cognito 应用程序客户端重新创建?