【问题标题】:Authorize id token using Custom Authorizer with Lambda and Boto3使用带有 Lambda 和 Boto3 的自定义授权器授权 id 令牌
【发布时间】:2018-11-21 20:58:38
【问题描述】:
我在 3 个不同的用户池中注册了一堆用户。我想授予 2 个用户池的用户访问权限并拒绝另一个用户池的权限。 API Gateway 允许使用 id 令牌来验证用户是否属于用户池授权方,并通过查看我们登录后获得的 id 令牌来授予访问权限。我想知道是否有任何方法可以在 boto3 中复制它?
我想要做的是在我的 lambda 授权程序中接收 id 令牌,检查它属于哪个用户池,然后允许访问我的集成请求中配置的 AWS 资源。我不想在授权后从我的 lambda 进行任何 api 调用。这可能吗?
【问题讨论】:
标签:
aws-lambda
aws-api-gateway
boto3
amazon-cognito
【解决方案1】:
Cognito ID 令牌采用 JWT(JSON Web 令牌)的形式。 ISS 声明的格式为 https://cognito-idp.{region}.amazonaws.com/{userPoolId}。
每个用户池都有一个对应的JWK,可以在https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json找到。
所以你需要在你的 Lambda 授权器中做的是从 ID 令牌中获取 ISS 声明(任何像样的 JWT 库都应该这样做)并计算出 UserPoolId。然后,如果它来自有效的用户池,则使用该用户池的 JWK 和合适的 JWT 库来验证令牌。因此,如果用户在相关用户池之一中并且令牌有效,则您授予访问权限。