AWS Cognito身份验证失败时无法获取有效的错误代码

问题描述 投票:0回答:1

我正在使用用户池使用AWS Cognito进行身份验证,并且我在API网关上配置了所有API。我直接从Angular客户端点击cognito,将Cognito返回的令牌存储在本地存储中,并在后续调用中使用它们。

但是问题是,如果我从Angular发送的令牌已过期,则Cognito身份验证将失败,并且在这种情况下不会命中Integration后端。结果,我在Chrome中收到401错误。

然而,有趣的是,此401代码在传递给Angular的HTTP响应对象中对我不可用。 Angular接收默认的0码,这似乎是从服务器(认知或后端)收到的所有错误码的情况。

我试图进行探索,发现问题可能是因为在错误情况下网关未发送正确的CORS标头。我已阅读以下相关文档,但很遗憾,我找不到解决此问题的方法。

有人可以提出解决方案的建议。

编辑:我还在某个地方读到它是一个已知的AWS问题。是这样吗?

amazon-web-services authentication aws-api-gateway amazon-cognito http-status-code-401
1个回答
0
投票

您可以在调用API网关之前管理Cognito会话。

在下面的示例中,getSession方法具有一个回调,该回调将向控制台输出所有错误消息,然后返回。

////// Cognito.js
import {
  CognitoUserPool,
  CookieStorage
} from 'amazon-cognito-identity-js'

import config from '../config'

const cookieSettings = {
  domain: '.xxxxxxxxxxx.com',
  secure: true
}

export default {
  cookieSettings,
  pool: new CognitoUserPool({
    UserPoolId: config.UserPoolId,
    ClientId: config.ClientId,
    Storage: new CookieStorage(cookieSettings)
  })
}
//////

////// actions.js
import Cognito from './Cognito'

export function fetchUser() {

  // get cognito user cookies
  const cognitoUser = Cognito.pool.getCurrentUser()
  if (cognitoUser != null) {
    // try to get session from cognito
    cognitoUser.getSession(function(err, session) {
      if (err) {
        console.log(err)

        return;
      }

      fetch('https://api-gateway-url', { 
        headers: {
          Authorization: 'Bearer ' + session.getAccessToken().getJwtToken(), 
        }
      })
      .then(response => response.json())
      .then(json => console.log(json))
    })
  }

}


© www.soinside.com 2019 - 2024. All rights reserved.