Serverless FrameworkでCognito User Poolsの認証付きAPIを作る

Cognito User Poolsを会員基盤としている場合、APIの認証をかなり簡単に作ることができます。そう、Serverless Frameworkなら。 serverless.yml こんな感じで書きましょう。 […]

広告ここから
広告ここまで

目次

    Cognito User Poolsを会員基盤としている場合、APIの認証をかなり簡単に作ることができます。そう、Serverless Frameworkなら。

    $ sls -v
    
    1.23.0

    serverless.yml

    こんな感じで書きましょう。

    service:
      name: cognito-apis
    
    provider:
      name: aws
      runtime: nodejs8.10
      iamRoleStatements:
        - Effect: "Allow"
          Action:
            - "*"
          Resource:
            - "arn:aws:cognito-idp:us-east-1:*:userpool/us-east-1_XXXXXX"
    
    functions:
      hello:
        handler: index.handler
        events:
          - http:
              path: hello
              method: get
              cors: true
              integration: lambda
              authorizer:
                name: authorizer
                arn: arn:aws:cognito-idp:us-east-1:999999999999:userpool/us-east-1_XXXXXX

    authorizerにarn: COGNITO_USER_POOL_ARNを設定することで、Cognito User Poolsを使った認証が簡単にできます。

    ユーザー名をAPI側で使いたい場合

    adminGetUserとかしたくなった場合、authorizerを以下のように変更しましょう。

              authorizer:
                name: authorizer
                arn: arn:aws:cognito-idp:us-east-1:999999999999:userpool/us-east-1_XXXXXX
                claims:
                  - 'cognito:username'

    claimsを設定することで、event.cognitoPoolClaimsに値が入ってきます。ちなみにここはcustom:hogeのようなカスタム属性も設定できます。

    尤も

    CloudFormationのラッパーということを考えれば、SAMでも十分簡単にできるとは思うんですけどね。手に馴染んでる方優先しました。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark