AWS CDK user pool authorizer

前端 未结 7 1407
滥情空心
滥情空心 2021-02-12 23:31

I\'m trying to create an API gateway using the AWS-CDK and protect the REST endpoints with a Cognito user pool authorizer.

I cannot find any examples how one would do th

7条回答
  •  南方客
    南方客 (楼主)
    2021-02-13 00:01

    This is my solution in TypeScript (based somewhat on bgdnlp's response)

    import { App, Stack, Aws } from '@aws-cdk/core';
    import { Code, Function, Runtime } from '@aws-cdk/aws-lambda';
    import { LambdaIntegration, RestApi, CfnAuthorizer, CfnMethod } from '@aws-cdk/aws-apigateway';
    
    const app = new App();
    const stack = new Stack(app, `mystack`);
    const api = new RestApi(stack, `myapi`);
    
    const region = Aws.REGION;
    const account = Aws.ACCOUNT_ID;
    const cognitoArn = `arn:aws:cognito-idp:${region}:${account}:userpool/${USER_POOL_ID}`;
    
    const authorizer = new CfnAuthorizer(stack, 'Authorizer', {
      name: `myauthorizer`,
      restApiId: api.restApiId,
      type: 'COGNITO_USER_POOLS',
      identitySource: 'method.request.header.Authorization',
      providerArns: [cognitoArn],
    });
    
    const lambda = new Function(stack, 'mylambda', {
      runtime: Runtime.NODEJS_10_X,
      code: Code.asset('dist'),
      handler: `index.handler`,
    });
    
    const integration = new LambdaIntegration(lambda);
    
    const res = api.root.addResource('hello');
    
    const method = res.addMethod('GET', integration);
    
    const child = method.node.findChild('Resource') as CfnMethod;
    
    child.addPropertyOverride('AuthorizationType', 'COGNITO_USER_POOLS');
    
    child.addPropertyOverride('AuthorizerId', { Ref: authorizer.logicalId });
    

提交回复
热议问题