0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【API Gateway】「Missing Authentication Token」は認証じゃなくて“パス間違い”だった話

0
Posted at

はじめに

API Gateway を初めて触って、作った API を curl で叩いたら、毎回これが返ってきました。

{"message":"Missing Authentication Token"}

「Authentication Token が無い」と言われるので、てっきり認証の設定が足りないんだと思い込み、しばらく API キーや認可の設定をいじっていました。

でも原因は認証ではなく、叩いていた URL のパスが存在しなかっただけでした😅

先に結論:API Gateway のこのメッセージは、多くの場合「認証が必要」ではなく、**「そのパス/メソッドが見つからない」**のサインです。

環境

  • Amazon API Gateway(REST API)
  • バックエンドは AWS Lambda
  • 動作確認は curl
  • リージョン: ap-northeast-1(東京)

起きたこと

こんな感じで、自分のエンドポイントを叩いていました(ID 類はマスクしています)。

curl -s https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/items

返ってくるのは毎回これ。

{"message":"Missing Authentication Token"}

HTTP のステータスも 403 で、見た目が認証エラーそっくりなので、最初は完全に「認証まわりの設定ミス」だと思い込んでいました。

原因:そのパスにメソッドが無かった

認証を疑うのをやめて、まず「API のパス構造がどうなっているか」を確認しました。

aws apigateway get-resources \
  --rest-api-id xxxxxxxxxx \
  --region ap-northeast-1

出力を見て気づきました。POST(や GET)メソッドが、/items のようなリソースではなく、ルート(/)側に付いていたのです。

/        ← ここに POST が付いていた
/items   ← メソッドが無い(空のリソース)

つまり私は「存在しないパス(/items)」を叩いていたので、API Gateway 的には「該当するルートが無い」状態でした。このとき返るのが Missing Authentication Token です。HTTP ステータスは 403 ですが、実態としては「未対応のパス、またはメソッドを呼んでいる」状態でした。名前もステータスも認証っぽいのに中身はルート不一致なので、調べる順番としては 404 のようにルート定義から確認するのが近道でした。

ちなみに REST API は、ステージに反映済みのデプロイメントを使っている場合、リソースやメソッドを変更したあとにそのステージへ再デプロイしないと反映されません。私は途中、直したつもりで叩いて「まだ直ってない?」と一度混乱しました。

対処

やったことは2つです。

  1. メソッドを正しいリソース(/items)側に作り直す
  2. 変更をステージへ再デプロイする
aws apigateway create-deployment \
  --rest-api-id xxxxxxxxxx \
  --stage-name prod \
  --region ap-northeast-1

そのうえで、正しいパスを叩いたら通りました。

curl -s https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/items
# → 期待どおりのレスポンスが返ってくる

「URL に余計なパスが付いていただけ」「メソッドの付け先を間違えていただけ」というケースも多いので、まずは 本当にそのパスが存在するかを確認するのが近道でした。

学び

  • Missing Authentication Token は、**多くの場合は認証ではなく「パス/メソッドが無い」**サイン。名前に惑わされない。
  • ただし IAM 認証の API で署名や Authorization ヘッダーが足りないと、本当に認証由来で出ることもある。だから「状況を確認してから」判断する。
  • 認証設定をいじる前に、aws apigateway get-resources でパス構造を目で確認する。
  • REST API は変更後にステージへ再デプロイしないと反映されない。
  • エラーメッセージの“見た目”と“原因”がズレることがある。ステータス 403 = 認証問題、とは限らない。

おわりに

「認証エラーっぽいのに認証が原因じゃない」というのは、最初すごく混乱しました😅 同じメッセージで固まっている人は、まずパスが存在するかを疑ってみると早いかもしれません🙌

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?