【问题标题】:What is the best way to refresh an AWS Cognito session in an Angular app在 Angular 应用程序中刷新 AWS Cognito 会话的最佳方式是什么
【发布时间】:2019-12-16 16:57:40
【问题描述】:

我正在使用 AWS Cognito 对应用程序的用户进行身份验证。我想每小时自动刷新一次会话,而无需用户再次登录。我当前的解决方案是保存自上次登录以来的时间,并根据当前时间检查以确定何时从 amazon-cognito-identity-js 库调用 cognito 用户池 refreshSession 函数。

我的问题是这是否是最好的方法。节省登录时间是最佳做法吗?

登录后,cognito 用户会话 id 令牌有效负载具有以下属性:

auth_time: 1565305136
exp: 1565308736
iat: 1565305137

我找不到关于这些值代表什么或它们是否可用于检查当前会话到期时间的任何信息。 还有一个 cognitoUser.getSession.isValid 函数,它依赖于也可以工作的 Cognito 回调。我宁愿不使用这种方法,因为我需要在每个请求的标头中设置访问令牌,目前这是在 Angular 拦截器类中完成的。在每个请求中使用异步回调似乎是个坏主意,因为我们可以在将时间存储在本地存储之后自己检查时间。

另一个问题是是否有 Amplify 方法可以做到这一点。我的理解是,包含 CLI 功能的 Amplify 在后台也使用了 amazon-cognito-identity-js。但是,我们没有使用 Amplify。我们的实现基于演示Angular Cognito app here

但是,可能有一种更新的方法可以做到这一点,例如,只需使用 Amplify 设置某种标志。

任何有助于阐明自动 Cognito 会话刷新的最佳实践的帮助将不胜感激。

【问题讨论】:

    标签: angular amazon-web-services amazon-cognito


    【解决方案1】:

    与您分享我们在某些 Angular 项目中运行良好的方法。

    • 在 cognito 端为 aws cognito 客户端设置设置刷新令牌过期 365 天。
    • 在 Angular 中,在 AppComponent(入口点)中尝试通过现有的刷新令牌进行身份验证。如果本地存储中没有刷新令牌或无法通过现有刷新令牌进行身份验证,请转到登录页面。同样在 AppComponent 中添加一个interval,它将在应用程序加载后每隔 30 分钟发出一次。这将作为一项 cron 作业工作,将通过本地存储刷新令牌调用 cognito API 以获取新令牌。因此,应用加载后每隔 30 分钟,新令牌将保存在本地存储中。

    export class AppComponent {
      ngOnInit() {
        const s = interval(interval_in_mili_sec);
        s.subscribe(value => {
          // call id token API
        });
      }
      
    }

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2013-05-29
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多