API Gateway(HTTP API)でJWTの検証を行う
HTTP APIのJWTオーソライザーを利用してJWTの検証を行います。
HTTP API
HTTP APIを作成します。
JWTオーソライザー
作成したAPI(POST)に対してJWTオーソライザーを作成してアタッチします。
以下を入力します。
発行者:https://[YOUR-TENANT-NAME].jp.auth0.com/
対象者:API識別子(audience)
アタッチされると以下のようになります。
次にスコープ追加します。設定したスコープがJWTのクレームにあるか検証してくれます。
スコープ:read:users
テスト
前提:ユーザは、JWTオーソライザーで指定した対象者(audience)のread:usersパーミッションを持っている
curlでテストします。
異なるaudienceのJWT指定します。
$ curl -i -X POST \ -H "Bearer: ey..." \ https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/hoge HTTP/1.1 401 Unauthorized Date: Thu, 24 Aug 2023 21:43:04 GMT Content-Type: application/json Content-Length: 26 Connection: keep-alive www-authenticate: Bearer scope="read:users" error="invalid_token" error_description="the token does not have a valid audience" apigw-requestid: KL1ERgGgNjMEJ5a= {"message":"Unauthorized"}
有効期限切れのJWTでテストします。
$ curl -i -X POST \ -H "Bearer: ey..." \ https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/hoge HTTP/1.1 401 Unauthorized Date: Thu, 24 Aug 2023 21:39:15 GMT Content-Type: application/json Content-Length: 26 Connection: keep-alive www-authenticate: Bearer scope="read:users" error="invalid_token" error_description="the token has expired" apigw-requestid: KL0gkhhqtjMEMCg= {"message":"Unauthorized"}
正常なJWTでテストします。
$ curl -i -X POST \ -H "Bearer: ey..." \ https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/hoge HTTP/1.1 200 OK Date: Thu, 24 Aug 2023 21:41:11 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 20 Connection: keep-alive Apigw-Requestid: KL0ypg5YNjMEJEQ= "Hello from Lambda!"
正常なJWTで、一時的にAPI Gatewayのread:usersパーミッションをread:usersxxxに変更してテストします。
$ curl -i -X POST \ -H "Bearer: ey..." \ https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/hoge HTTP/1.1 403 Forbidden Date: Thu, 24 Aug 2023 21:52:40 GMT Content-Type: application/json Content-Length: 23 Connection: keep-alive www-authenticate: Bearer scope="read:usersxxx" error="insufficient_scope" error_description="expected scopes: [read:usersxxx]" apigw-requestid: KL2eTjeBNjMEP-Q= {"message":"Forbidden"}
参考サイト
ERROR: The request could not be satisfied
ERROR: The request could not be satisfied
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント