12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cognitoが発行したJWTを使ってAPI GatewayのAuthorizerで認証をし、Lambdaで認証情報を受取る

Last updated at Posted at 2021-07-19

ユースケースとしては、

  • とにかく早く実装をしたい
  • JWTのデコードを実装したくない
  • 複数のバックエンドで認証をしたくない

などのケースが当てはまるのではないか、と思います。

やり方

AWS上のリソース(Cognito、Lambda、Gateway)を設定した後、Cognitoが提供しているビルトインのUIからログインをしてトークンを取得した後、ポストマンからリクエストを投げ、認証情報が取得できていることの確認をします。

フロントエンドを作るのが面倒くさいので、作らずに行きます。

トークンの受け取りをするサーバがないことになるので、デベロッパーツールからコピペするなどの工夫をします。

Cognitoの設定

基本的にはデフォルトのままでOKです。

リソース作成

スクリーンショット 2021-07-19 13.00.22.png

クライアント作成

スクリーンショット 2021-07-19 13.03.58.png

クライアント設定

本来フロントのホストをいれますが、なんでもいいです。
スクリーンショット 2021-07-19 13.03.14.png

ドメイン設定

スクリーンショット 2021-07-19 13.50.43.png

設定が出来たら、App Client Settingsにある『Launch Hosted UI』をクリックし、デベロッパーツールを開いたままログインをしてください。

ログインが成功すれば、302が帰ってくるので、レスポンスのLocationから、id_tokenのみをメモしておきます。

スクリーンショット 2021-07-19 14.06.36.png

Lambdaの設定

こちらをコピーしてください。

import json

def lambda_handler(event, context):
    return {
        'message': f"Hello {event['requestContext']['authorizer']['jwt']['claims']['cognito:username']} from Lambda!!!",
        'token_info': event['requestContext']['authorizer']['jwt'],
    } 

Api Gatewayの設定

GateWayを適当に作ったあと、Authorizerを以下のように設定します。

スクリーンショット 2021-07-19 13.47.58.png

Authorizerを設定したGatewayのパスにアクセスして、

{"message":"Unauthorized"}

が出てくればOKです。

認証情報の取得

PostmanなどのHTTPクライアントで、Authorizationヘッダに、『Bearer {↑で取得したIDトークン}』をつけて、リクエストを送ると、以下のようなレスポンスが帰ってくるはずです。

{
    "message": "Hello sample_user from Lambda!!!",
    "token_info": {
        "claims": {
            "at_hash": "adsfasddsdf",
            "aud": "asdfasf",
            "auth_time": "sfasdf",
            "cognito:username": "asdfsdaf",
            "email": "asdfasf",
            "email_verified": "ssdaf",
            "event_id": "asdfasdf",
            "exp": "1626670138",
            "iat": "1626666538",
            "iss": "sadsadfs",
            "jti": "sadfsfd",
            "sub": "safasdf",
            "token_use": "asdfasfdsadf"
        },
        "scopes": null
    }
}
12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?