4

AWS Api Gateway のベータ版「HTTP API」機能を試しています。

この実験の一環として、「JWT オーソライザー」を使用して API へのアクセスを承認しようとしています。

https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html

ドキュメントには、JWT が承認または拒否される前に、JWT の一連のチェック/検証で構成されるワークフローを通過すると記載されています。

オーソライザーがなくても、エンドポイントにアクセスできます。オーソライザーを使用すると、json で 401 応答が返されます。

{"message":"Unauthorized"}

オーソライザーがJWTを拒否しているステップを見つけようとしています。API エンドポイントのログを設定し、リクエストが着信していることを確認しましたが、認証が失敗した理由についての洞察は得られません。

オーソライザーが失敗する理由/場所をデバッグする方法はありますか?

注: これは lamda オーソライザーについて話しているわけではありません。また、Cognito を使用して JWT を生成していません。

4

3 に答える 3

3

401 は、ユーザーの認証を確立できなかったことを意味します。基本的に、JWT に問題があるか、API Gateway が予期しているヘッダーでリクエストが提供されていません。

また、API ゲートウェイは本格的なサーバーではないため、API ゲートウェイが JWT をどのように利用しているかをデバッグすることはできません。残念なことかもしれませんが、JWT ベースの認証サポートが組み込まれたバックエンド用の非常にスケーラブルで信頼性が高く安価な HTTP エンドポイントを提供し、ほとんどのリージョンで利用できるようになったことに注意してください。だから、私はまだそれを取り消しません。

あなたの質問に戻ります。デバッグ部分を手伝う方法はわかりませんが。コードを 1 行も書かずに JWT オーソライザーを試すために行った手順を説明します。

  1. https://mkjwk.org/を介して一時的な JWK を作成しました。これにより、選択した子供と RS256 アルゴリズムを使用して、公開鍵と秘密 + 公開鍵のペア セットが提供されます。
  2. 公開鍵をコピーして、ISSUER_URL/.well-known/jwks.json に挿入します。Cognito を使用していない場合は、ファイルを S3 に配置して実験を実行できます (この場合、S3 バケットの URL が発行者の URL になります)。S3 を使用している場合は、ISSUER_URL/.well_known/openid-configuration ファイルも作成し、これらのファイルを実験中に公開する必要があります。これらのファイルは、オンラインで検索できる標準形式 (OIDC) に従っています。jwks.json ファイルには公開鍵のみが含まれているため、他の誰かが手に入れても問題ないことに注意してください。
  3. 秘密鍵と公開鍵のペア セットを取得し、https://8gwifi.org/jwkconvertfunctions.jspに移動して、個別の秘密および公開 RSA pem キーを取得します。
  4. https://jwt.io/に移動し、RS256 アルゴ、kidヘッダー クレーム (最初のステップでキーを生成するために使用したものと同じ値を使用)、ペイロードのaudクレーム (これは、JWT の設定時に選択した構成と一致する必要があります) を選択します。 HTTP API ゲートウェイのオーソライザー)、ペイロードのissクレーム (これは ISSUER_URL と一致する必要があります)、ペイロードのexpクレーム (JWT の有効期限、https://www.epochconverter.com/を使用できます)、nbfクレームのペイロード ( https://www.epochconverter.com/から現在のタイムスタンプを取得するだけです)) と、前の手順で取得した公開および秘密の RSA pem キーも、対応する署名セクションに配置されます。また、HTTP API ゲートウェイを使用して JWT オーソライザーをセットアップする際に承認スコープを設定する場合は、 scpペイロード クレームを提供します。

これらすべてを実行した後、API ゲートウェイが生成した JWT と連携できることをテストできました。これで、より自信を持ってこのことをコーディングできるようになりました。幸いなことに、JAVA やノードなどのツールが既に利用可能です。

于 2020-03-26T04:25:45.327 に答える
3

応答を見てください。認証に失敗した場合のエラー応答を含む www-authenticate というヘッダーがあります。

すなわち:

www-authenticate: Bearer scope="" error="invalid_token" error_description="JWKS 通信エラー"

curl を使用している場合は、-v で試して、ヘッダーを含む完全な応答を確認できます。

于 2020-04-07T16:43:32.813 に答える