从通过 Cognito 生成的授权令牌识别 AWS Lambda 中的用户

Tah*_*raf 5 authorization amazon-web-services amazon-cognito aws-lambda aws-api-gateway

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

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

Run Code Online (Sandbox Code Playgroud)

获得 后access_token,用户在访问受保护端点时在标头中传递此授权令牌。Cognito 自动授权用户,并将请求重定向到特定的 AWS Lambda。这一切工作正常。

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

注意:如果我可以App client id从传递的授权令牌中获取,它将满足我的目的。

Nik*_*dam 2

对您问题的答复:

1.如何判断是哪个用户的token被传递了?

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

例如:

var jwt = require('jsonwebtoken'); // you can use import
var decoded = jwt.verify(token, secret);
console.log(decoded) // bar
Run Code Online (Sandbox Code Playgroud)

2.是否有其他方法可以确定授权用户的身份?

  • 您可以使用访问令牌通过 GetUser 方法从 cognito 获取用户详细信息。

请参阅:https ://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html

3.如果我可以从传递的授权令牌中获取应用程序客户端ID,它将满足我的目的。

  • 无法从授权令牌获取应用程序客户端 ID。

  • 通常,是您在 aws Cognito 的 AWS 管理控制台的用户池部分创建应用程序时收到的客户端应用程序 ID。

  • 用户池访问令牌包含有关经过身份验证的用户的声明,但与 ID 令牌不同,它不包含身份信息。访问令牌的主要目的是在用户池中的用户上下文中授权 API 操作。

请参阅: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html#amazon-cognito-user-pools-using-访问令牌

正确的做法:

在此输入图像描述