amazon-web-services - 从通过 Cognito 生成的授权 token 识别 AWS Lambda 中的用户

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

我们正在使用 API Gateway公开我们位于 AWS Lambdas 前面的 API .作为授权人,Cognito用户池已在 API Gateway 中用于对用户进行身份验证并保护 protected 端点。因此,一般流程是,用户传递下面提到的信息以通过 API 网关端点 ( /grantToken ) 从 cognito 获取访问 token :

1. App client id
2. App client secret
3. username
4. password


获取后access_token , 用户在访问 protected 端点时在 header 中传递此授权 token 。 Cognito 自动授权用户,并将请求重定向到特定的 AWS Lambda。这一切工作正常。

我想知道的是,在 lambda 中,来自授权 token (在 header 中传递) - 如何确定传递了哪个用户的 token ?还有其他方法可以确定授权用户的身份吗? AWS Cognito 在这种情况下有什么用吗?

注意:如果我能得到 App client id从传递的授权 token 中,它将满足我的目的。

最佳答案

回答您的问题:

1. 如何确定传递的是哪个用户的 token ?

  • 您可以使用任何 JWT token 解码器,例如 jsonwebtoken

  • 例如:
    var jwt = require('jsonwebtoken'); // you can use import
    var decoded = jwt.verify(token, secret);
    console.log(decoded) // bar
    

    2、有没有其他方法可以确定授权用户的身份?
  • 您可以使用访问 token 使用 GetUser 方法从 cognito 获取用户详细信息。

  • 引用:https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html

    3. 如果我可以从传递的授权 token 中获取 App 客户端 ID,它将满足我的目的。
  • 这无法从授权 token 中获取应用程序客户端 ID。
  • 通常,您在 AWS 管理控制台的用户池部分中创建应用程序时收到的客户端应用程序 ID,用于 aws Cognito。
  • 用户池访问 token 包含有关经过身份验证的用户的声明,但与 ID token 不同的是,它不包含身份信息。访问 token 的主要目的是在用户池中的用户上下文中授权 API 操作。

  • 引用: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html#amazon-cognito-user-pools-using-the-access-token

    正确做法:
  • 您应该在 nodejs 中存储相同的 App 客户端 ID、 secret .env 文件并在需要时访问它。
    此 URL 将帮助您找到应用程序客户端 ID:https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html

  • enter image description here

    关于amazon-web-services - 从通过 Cognito 生成的授权 token 识别 AWS Lambda 中的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841114/

    相关文章:

    amazon-web-services - 我在 Lambda@Edge 源请求函数中替换正文时出现验证错误

    java - 在 Jersey ResourceFilterFactory 中获取实际参数值

    mobile - Google API OAuth 2.0 Titanium : Required parameter is missing: response_type

    java - 在 EC2 实例上运行时,Amazon S3 不返回响应或抛出错误

    javascript - 如何配置 Visual Studio Code 来解析 AWS Lambda 层的输入路径 (javascript)

    amazon-web-services - AWS 无服务器图像处理程序 : images aren't displayed even though they are generated

    javascript - 在异步请求结束之前,Lambda 函数不会返回

    node.js - 表达限制资源属于特定用户的优雅方式

    python - Boto3对象put方法加载0字节

    java.io.Exception com.android.okhttp 上的流意外结束