自定义授权者AWS CDK

时间:2019-09-19 06:18:33

标签: amazon-web-services aws-api-gateway aws-cdk

我正在尝试使用CDK将自定义授权者附加到API。

我正在使用Cognito进行用户管理。

我想使用自定义授权者实现的是

  • 检查用户是否有权使用API​​
  • 标识用户的电子邮件(userId)并将其附加到请求正文中
  • 在API lambda中使用该电子邮件

我找不到有关如何将自定义授权者附加到API的任何示例或文档。如何附加自定义授权者,或者CDK不支持自定义授权者,是否可以解决要求?

2 个答案:

答案 0 :(得分:1)

以下内容可以帮助您获得想要实现的目标。目前authorizer上的addMethod未实现,因此您需要覆盖。

const api = new RestApi(this, 'RestAPI', {
    restApiName: 'Rest-Name',
    description: 'API for journey services.',
});

const putIntegration = new LambdaIntegration(handler);

const auth = new CfnAuthorizer(this, 'CustomAuthorizer', {
    name: 'custom-authorizer',
    type: AuthorizationType.CUSTOM,
    ...
});

const post = api.root.addMethod('PUT', putIntegration, { authorizationType: AuthorizationType.CUSTOM });
const postMethod = post.node.defaultChild as CfnMethod;
postMethod.addOverride('Properties.AuthorizerId', { Ref: auth.logicalId });

这将附加创建的authorizer

答案 1 :(得分:0)

您必须:

  • 创建api网关
  • 在api网关中将Cognito设置为授权者
  • 在您的方法中设置授权
  • 将与lambda的集成设置为“使用Lambda代理集成”。 LambdaIntegration属性默认情况下为true,因此不必担心

最后,发出一个请求,在令牌中添加令牌。 API网关将使用Cognito对其进行验证。如果通过此验证,则将触发您的lambda,并且在事件中您可以找到声明 event.requestContext.authorizer.claims 。有一些方法可以做到,请遵循此link