使用带有Lambda和Boto3的自定义授权程序授权id令牌

时间:2018-06-12 12:43:03

标签: aws-lambda aws-api-gateway boto3 amazon-cognito

我在3个不同的用户池中注册了一大堆用户。我想授予对2个用户池的用户的访问权限,并拒绝对另一个用户池的权限。 API网关允许使用id令牌来验证用户是否属于用户池授权程序,并通过查看登录后获得的id令牌来授予访问权限。我想知道是否有任何方法可以在boto3中复制它? / p>

我想要做的是在我的lambda授权器中接收id令牌,检查它属于哪个用户池,然后允许访问我的Integration Request中配置的AWS资源。授权后,我不想从我的lambda拨打任何api电话。这可能吗?

1 个答案:

答案 0 :(得分: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 Authorizer中执行的操作是从ID令牌获取ISS声明(任何体面的JWT库应该这样做)并计算出UserPoolId。然后,如果它来自有效的用户池,则使用该用户池的JWK和正常的JWT库验证令牌。因此,如果用户位于相关用户池之一,则令牌有效,您可以授予访问权限。