サイトのAPI図鑑B版
掲載情報が正確でない可能性があります。
API基礎・入門

API認証の種類(APIキー・OAuth 2.0・JWT)と選び方を徹底解説

APIキー・OAuth 2.0・JWT・Basic認証など、主要なAPI認証方式の仕組みとセキュリティ特性を比較。用途に合った認証方式の選び方を実例つきで解説します。

#認証#OAuth#JWT#セキュリティ#APIキー

API認証とは

API認証とは、APIにアクセスするクライアントが正当な利用者であることを確認する仕組みです。認証がなければ、誰でもAPIにアクセスできてしまい、データの盗取や不正利用のリスクが生じます。また、認証に加えて「認可(Authorization)」も重要です。認証はIDを確認すること、認可はその利用者がどの操作を行えるかを制御することです。

APIの種類や用途によって適切な認証方式が異なります。主要な方式を理解し、プロジェクトの要件に合ったものを選択することがセキュリティとUXの両立につながります。

主要なAPI認証方式

1. APIキー認証

最もシンプルで広く使われている認証方式です。APIプロバイダーが発行した文字列(APIキー)をリクエストに含めることで認証します。

リクエストへの含め方は主に3種類あります。

  • リクエストヘッダー:X-API-KeyやAuthorizationヘッダーに含める(推奨)
  • クエリパラメーター:URLに?api_key=xxxとして含める(URLログに残るため非推奨)
  • リクエストボディ:POSTリクエストのボディに含める

APIキー認証のメリットは実装が単純であることですが、キーが漏洩した場合のリスクが大きいため、IP制限・スコープ制限・定期的なローテーションを組み合わせることが重要です。

2. Basic認証

ユーザー名とパスワードをBase64エンコードしてAuthorizationヘッダーに含める古典的な方式です。Base64は暗号化ではないため、必ずHTTPS(TLS)と組み合わせて使用する必要があります。現代では主に内部API・管理ツール・テスト環境で使われます。

3. Bearer Token(アクセストークン)

アクセストークン(任意の文字列)をAuthorizationヘッダーに「Bearer {token}」の形式で含める方式です。OAuth 2.0の認可フローで発行されたトークンを使うケースが多く、現代のWeb APIの主流です。

4. OAuth 2.0

OAuth 2.0はサードパーティアプリがユーザーの同意のもとでリソースにアクセスする権限を委譲するためのフレームワークです。「Googleアカウントでログイン」「GitHubで認証」のような機能の基盤技術です。

主要な認可フロー(Grant Type)には以下があります。

  • 認可コードフロー:Webアプリ向けの最も安全なフロー。PKCEとの組み合わせがSPAやモバイルアプリでの標準的な実装
  • クライアントクレデンシャルフロー:サーバー間通信(M2M)向け。ユーザー不在で機械同士が通信する際に使用
  • インプリシットフロー:廃止推奨。認可コードフロー+PKCEに移行すべき

5. JWT(JSON Web Token)

JWTはユーザー情報(クレーム)をJSON形式でエンコードし、署名を付与したトークンです。ヘッダー・ペイロード・署名の3パートをBase64URLエンコードしてドット(.)でつないだ構造を持ちます。

JWTの最大の特徴はステートレスであることです。トークン自体に情報が含まれているためサーバーがセッションを保持する必要がなく、マイクロサービスや分散システムに適しています。一方、一度発行したJWTは有効期限まで無効化が困難なため、短い有効期限(15〜60分)とリフレッシュトークンの組み合わせが推奨されます。

6. HMAC署名認証

リクエストのタイムスタンプ・ボディ・シークレットキーを組み合わせてハッシュ値を生成し、リクエストの完全性と正当性を確認する方式です。AWSのSignature Version 4などが代表例で、リプレイ攻撃への耐性が高く、フィンテック・決済系APIでよく見られます。

認証方式の選び方

ユースケース推奨認証方式
内部システム間通信(M2M)OAuth 2.0クライアントクレデンシャルフロー
サードパーティ開発者向けパブリックAPIAPIキー(スコープ・IP制限付き)
ユーザー代理アクセス(SNS連携等)OAuth 2.0認可コードフロー + PKCE
マイクロサービス間認証JWT(短期トークン)
高セキュリティな決済・金融APIHMAC署名 + mTLS

APIキーの安全な管理方法

APIキーやトークンの管理はセキュリティの要です。以下のベストプラクティスを遵守してください。

  • ソースコードにハードコードしない(必ず環境変数や秘密管理サービスを使用)
  • .envファイルを.gitignoreに追加する
  • 本番・開発・テスト環境でキーを分離する
  • 最小権限の原則:必要なスコープのみ付与したキーを使用
  • 定期的なローテーション(90日ごとの変更を推奨)
  • IPアドレス制限・ドメイン制限の活用
  • 利用ログの監視とアラート設定

まとめ

API認証はセキュリティの根幹を成す重要な要素です。「シンプルさ」と「セキュリティ」のトレードオフを意識しながら、ユースケースに合った認証方式を選択してください。特にユーザーの個人情報や決済情報を扱うAPIでは、OAuth 2.0やJWTを適切に組み合わせた多層防御が求められます。最新のセキュリティベストプラクティスは常に更新されるため、OWASPのAPI Security Top 10などの資料も定期的に参照することをお勧めします。

よくある質問

Q.OAuthとOIDCの違いは何ですか?

OAuth 2.0は認可(アクセス権限の委譲)のためのフレームワークです。OpenID Connect(OIDC)はOAuth 2.0の上に認証(ユーザーのID確認)を追加した仕様です。「Googleでログイン」のような機能はOIDCを使っています。

Q.JWTのトークンはどこに保存すべきですか?

ブラウザでのWebアプリケーションではHttpOnly Cookieへの保存が推奨されます。localStorageはXSSで盗まれるリスクがあります。モバイルアプリではSecure StorageやKeychainを使用してください。

Q.APIキーが漏洩した場合はどうすればよいですか?

速やかに該当のAPIキーを無効化(ローテーション)し、新しいキーを発行してください。漏洩した経緯を調査し、不正利用のログを確認することも重要です。GitHubにコミットした場合はコミット履歴から削除するだけでなく、必ずキーを無効化してください。

関連記事