如何使用 Amazon Cognito 注销终端节点?

Posted

技术标签:

【中文标题】如何使用 Amazon Cognito 注销终端节点?【英文标题】:How to use Amazon Cognito Logout endpoint? 【发布时间】:2018-12-17 20:51:21 【问题描述】:

我在我的应用程序中使用 AWS Cognito。

在注销时我打电话给Logout Endpoint。

但在注销后,我仍然能够使用旧的刷新令牌生成 id-tokens。

这意味着我的注销端点不再工作。我将令牌保存在本地存储中,并且在注销时手动清除存储。

我的问题是:如何正确使用AWS的注销机制 认知?

【问题讨论】:

您找到解决问题的方法了吗? 好吧,最后我发现 idtoken 将至少在 1 小时内有效。如果我们想销毁刷新/访问令牌,则必须使用全局注销选项。参考:docs.aws.amazon.com/cli/latest/reference/cognito-idp/… 【参考方案1】:

我不确定您使用的是哪个框架,但我使用的是 Angular。不幸的是,有多种使用 AWS Cognito 的方法,并且文档不清楚。这是我的身份验证服务的实现(使用 Angular):

- 注意 1 - 使用此登录方法 - 一旦将用户重定向到注销 url - 本地主机会自动刷新并删除令牌。

- 注意 2 - 您也可以通过调用手动执行此操作:this.userPool.getCurrentUser().signOut()

import  Injectable  from '@angular/core'
import  CognitoUserPool, ICognitoUserPoolData, CognitoUser  from 'amazon-cognito-identity-js'
import  CognitoAuth  from 'amazon-cognito-auth-js'
import  Router  from '@angular/router'

const COGNITO_CONFIGS: ICognitoUserPoolData = 
  UserPoolId: 'INSERT YOUR USER POOL ID',
  ClientId: 'INSERT YOUR CLIENT ID',


@Injectable()
export class CognitoService 

  userPool: CognitoUserPool
  constructor(
    private router: Router
  ) 
    this.createAuth()
  

  createAuth(): void 
    // Configuration for Auth instance.
    const  authData = 
      UserPoolId: COGNITO_CONFIGS.UserPoolId,
      ClientId: COGNITO_CONFIGS.ClientId,
      RedirectUriSignIn : 'INSERT YOUR COGNITO REDIRECT URI',
      RedirectUriSignOut : 'INSERT YOUR COGNITO SIGNOUT URI',
      AppWebDomain : 'INSERT YOUR AMAZON COGNITO DOMAIN',
      TokenScopesArray: ['email']
    

    const  auth: CognitoAuth = new CognitoAuth(authData)
    // Callbacks, you must declare, but can be empty.
    auth.userhandler = 
      onSuccess: function(result) 
      ,
      onFailure: function(err) 
      
    

    // Provide the url and parseCognitoWebResponse handles parsing it for us.
    const curUrl = window.location.href
    auth.parseCognitoWebResponse(curUrl)
  

  /**
   * Check's if the user is authenticated - used by the Guard.
   */
  authenticated(): CognitoUser | null 
    this.userPool = new CognitoUserPool(COGNITO_CONFIGS)
    // behind the scene getCurrentUser looks for the user on the local storage.
    return this.userPool.getCurrentUser()
  

  logout(): void 
    this.router.navigate(['/logout'])
  

【讨论】:

以上是关于如何使用 Amazon Cognito 注销终端节点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 Amplify 的情况下使用 Amazon Cognito

在预认证用户的情况下如何使用 amazon cognito 获取刷新令牌

使用确认 URL 确认 amazon cognito 后如何重定向?

如何使用 Amazon Cognito 作为我的网站(非移动应用程序)的用户身份验证 [关闭]

AWS Amplify 和 amazon-cognito-identity-js 的区别?

如何将 Cognito 令牌传递给 Amazon API Gateway?