Aws Lambda/Api-Gateway/Cognito 一起工作

Aws Lambda/Api-Gateway/Cognito working together

我正在尝试使用 Lambda 来验证 Web 应用程序。我使用 lambdAuth 作为开始让事情顺利进行。 https://github.com/danilop/LambdAuth

我想要一个 api-网关服务,它首先授权一个成员,从 cognito 返回令牌。 api-gateway 中的所有后续服务都需要以某种方式接受从 cognito 返回的内容以允许访问该服务,如果没有它就会失败。我对如何使用 cognito 有点困惑。我假设您通过将 AWS_IAM 标记添加到您的服务授权来限制您的 api-网关服务,但我不知道如何调用该服务...?

在 LambdAuth 的当前实现中,它完成了所有客户端(在浏览器中),直接调用 lambda。它获取 AWS.config.credentials,将从 cognito 返回的 IdentityId 和登录添加到它,然后调用要求您登录的 lambda 函数。调用 api-gateway 而不是调用时这将如何工作拉姆达。我如何获取从 cognito 返回的内容,并将其添加到我的服务调用中以通过 AWS_IAM 授权?

任何帮助将不胜感激,或者如果我完全错过了船,那也是可能的...

对于在 API 网关后面处理身份验证的 lambda 函数,您需要它们未经授权,因为您的用户尚未登录。

对于已授权的 API 网关背后的 lambda 函数,您需要在实例化客户端时传入从 Cognito 获取的凭据。

看起来您正在进行开发人员身份验证,因此当您从 backend/lambda 函数中获取 Cognito 令牌时,在您的应用中您仍然需要获取凭据:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
   IdentityPoolId: 'IDENTITY_POOL_ID',
   IdentityId: 'IDENTITY_ID_RETURNED_FROM_YOUR_PROVIDER',
   Logins: {
      'cognito-identity.amazonaws.com': 'TOKEN_RETURNED_FROM_YOUR_API'
   }
});

然后,根据您的凭据,您将需要访问密钥、秘密密钥和会话密钥来实例化您的 API 网关客户端:

实例化您的 API 网关客户端:

var client = apigClientFactory.newClient({ 
accessKey: ACCESS_KEY, 
secretKey: SECRET_KEY, 
sessionToken: SESSION_TOKEN });