API Gateway カスタム認証のエラーレスポンスをカスタマイズする

  • 2
    Like
  • 0
    Comment

普通に使うとエラーレスポンスが固定になる

API Gateway カスタム認証 (Custom Authorizers) において、トークンが不正な場合は context.fail("Unauthorized") のようにエラーを返すのが一般的だろう。公式ドキュメントの例でもそうなっている。

しかし、その方法だとエラーレスポンスが「401 Unauthorized」に固定化されてしまう。提供したいAPIの要件によっては、任意のステータスコードやレスポンスボディを使いたいことがある。

この問題はAWSのフォーラムでも話題になっている。下記は一例。

このやりとりを見ると将来的には改善されそうだが、時期はわからない。

カスタマイズする方法

ただし現状でも、下記のように実装すればカスタマイズ可能である。

  1. Custom Authorizer のレスポンスは常に認証OKとする。かわりに実際の認証結果をレスポンスの context に含める(参考:Amazon API Gateway カスタム認証からの出力)。ここでは例として context.validToken に含めることにする
  2. 統合リクエストで $context.authorizer.validToken の値をマッピングする(参考:$context 変数へのアクセス
  3. バックエンドはマッピングされた値を参照し、認証結果に応じたレスポンスを返す
  4. 統合レスポンスで、3の内容に応じた任意のステータスコードやレスポンスボディをマッピングする

この方法を採用すべきかどうかは状況による。ただ、選択肢のひとつとして知っておいて損はない。