【问题标题】:Aws Lambda/Api-Gateway/Cognito working togetherAws Lambda/Api-Gateway/Cognito 一起工作
【发布时间】:2016-08-11 12:11:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cognito aws-api-gateway


    【解决方案1】:

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

    对于经过授权的 API Gateway 背后的 lambda 函数,您需要在实例化客户端时传入您从 Cognito 获得的凭据。

    看起来您正在进行开发人员身份验证,因此当您从后端/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 Gateway 客户端:

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

    【讨论】:

    • 谢谢马克,我相信这会有所帮助。我假设的底部部分是从 JavaScript 调用 Api Gateway,我想做的只是进行正常的休息服务调用......我不希望我的客户必须加载 AWS 库。所以我不确定是否将 access_key 和 secret_key 添加为标头或它是如何工作的......不过,一旦我拿回我的钥匙,我可能会在某个地方找到它,谢谢
    • 嗨@3uPh0riC 我也有同样的问题,你是怎么解决的?
    猜你喜欢
    • 2017-12-30
    • 2018-12-16
    • 2018-02-16
    • 2018-03-02
    • 2018-09-29
    • 2017-05-29
    • 2022-11-15
    • 2021-08-05
    • 2019-05-11
    相关资源
    最近更新 更多