API設計

API認証 えーぴーあいにんしょう

APIキーOAuthJWTBearer トークン認可アクセス制御
API認証について教えて

簡単に言うとこんな感じ!

APIへのアクセスに「合言葉」や「身分証」を要求する仕組みだよ!「このシステムはちゃんと許可された相手か?」を確認するドアの鍵みたいなもので、無断アクセスや不正利用を防いでくれるんだ。


API認証とは

API認証(API Authentication)とは、APIを呼び出す側(クライアント)が「本当に許可された相手かどうか」をAPIサーバー側が確認するプロセスのことです。Webサービスやシステム連携でAPIを使う際、誰でも自由にアクセスできてしまうと、情報漏洩や不正操作・過剰利用(コスト増大)などのリスクが生じます。そこでAPIサーバーは「合言葉」や「身分証」にあたる情報をリクエストに要求し、正しい相手だけを通すようにします。

認証(Authentication)と似た言葉に認可(Authorization)があります。「認証」は「あなたは誰か?」を確認すること、「認可」は「あなたに何が許されているか?」を決めることです。API認証はこの両方をセットで扱うことが多く、たとえばOAuthでは認証後に「読み取りだけ許可」「書き込みも許可」といったスコープ(権限の範囲)を細かく制御できます。

実務上は、社内の基幹システムと外部SaaSを連携させるときや、自社が開発したアプリから外部APIを呼ぶときに必ず登場します。「どの認証方式を選ぶか」はセキュリティ・開発コスト・運用のしやすさに直結するため、システム発注時の要件定義でも重要な検討ポイントになります。


API認証の主な方式

方式一言で言うと使いどころセキュリティ強度
APIキー固定の「合言葉」文字列社内ツール連携・簡易API低〜中
Basic認証IDとパスワードをそのまま送るレガシーシステム・テスト用低(HTTPS必須)
Bearer トークン一時的な「入場券」を使い回すモバイルアプリ・SPA中〜高
OAuth 2.0権限を細かく委譲する仕組みSNSログイン・SaaS連携
JWT署名付きの「自己完結した身分証」マイクロサービス・API間連携
相互TLSmTLSサーバーとクライアント双方が証明書を提示金融・医療など高セキュリティ領域非常に高

覚え方:「鍵・票・証」で整理しよう

  • APIキー → 「合言葉の鍵」。固定なので漏れたら終わり。
  • トークン(Bearer/JWT) → 「有効期限付きの入場票」。期限切れで自動無効化できる。
  • mTLS → 「両者が本物かを確かめ合う身分証」。最も厳格。

JWT(JSON Web Token)の構造

JWTは3つのパーツをドット(.)でつないだ文字列です。

ヘッダー.ペイロード.署名
eyJhbGci...  .eyJzdWIi...  .SflKxwRJSMeKKF...
  ↑アルゴリズム情報   ↑ユーザー情報・有効期限   ↑改ざん検知用の署名

サーバーは署名を検証するだけで「本物か・期限切れでないか」がわかるため、データベースを毎回引かずに済む(ステートレス)のが強みです。


歴史と背景

  • 1990年代末〜2000年代初頭 — Webサービス間連携にSOAPが使われ始める。認証はWS-Securityという複雑な仕様で行われた。
  • 2000年 — Roy FieldingがREST(アーキテクチャスタイル)を提唱。シンプルなAPIの概念が広まる。
  • 2007年頃 — Twitter・GoogleなどがシンプルなAPIキー方式でAPIを公開し始め、広く普及。
  • 2010年OAuth 1.0aRFC 5849)が標準化。署名ベースで安全だが実装が複雑だった。
  • 2012年OAuth 2.0RFC 6749)公開。実装がシンプルになり、Facebookログイン・Googleログインなど「ソーシャルログイン」が爆発的に普及。
  • 2015年JWTRFC 7519)が標準化。マイクロサービスアーキテクチャの広がりとともにAPI間認証の主流に。
  • 2020年代OpenID Connect(OAuthの上にユーザー認証を乗せた規格)とJWTの組み合わせがクラウドSaaS連携の事実上の標準となる。ゼロトラストセキュリティの普及でmTLSへの注目も高まる。

OAuth 2.0とJWTの関係・フロー図

OAuth 2.0とJWTはよく一緒に使われますが、役割が異なります。OAuth 2.0は「誰に何を許可するか」のフロー(手順)を定めた仕様で、JWTはその結果発行されるトークンの形式です。

OAuth 2.0 認可コードフロー(JWTトークン発行まで) クライアント (アプリ・システム) 認可サーバー (IdP / Auth Server) リソースサーバー (保護されたAPI) ① 認可リクエスト(scope指定) ② 認可コード発行 ③ 認可コード+クライアント認証を送信 ④ アクセストークン発行 (JWT形式 / 有効期限付き) ⑤ JWTをBearerで送信 ⑥ 署名検証→レスポンス返却 JWTを安全に保管

APIキー vs OAuth 2.0:どちらを選ぶ?

比較項目APIキーOAuth 2.0 + JWT
実装の簡単さ◎ 非常に簡単△ 設計・実装コストが高い
トークンの有効期限✕ 期限なし(手動で変更要)◎ 自動で期限切れ
権限の細かさ✕ キー単位でしか制御できない◎ スコープで細かく制御
漏洩時のリスク高(即時無効化が必要)低(短期トークンなら被害限定的)
向いている用途社内ツール・PoC・低リスクAPI本番SaaS・外部公開API・個人情報を扱う連携

関連する規格・RFC

規格・RFC番号内容
RFC 6749OAuth 2.0 認可フレームワークの仕様
RFC 6750OAuth 2.0 Bearer トークンの使用方法
RFC 7519JWT(JSON Web Token)の仕様
RFC 7517JWK(JSON Web Key):JWTの鍵管理仕様
RFC 7521OAuth 2.0 クライアント認証へのアサーション使用
RFC 8705OAuth 2.0 相互TLS(mTLS)クライアント認証
RFC 5849OAuth 1.0a(旧バージョン、参考)

関連用語

  • API — アプリケーション間の連携窓口となるインターフェース仕様
  • OAuth — 権限委譲のための業界標準認証フレームワーク
  • JWT(JSON Web Token) — 署名付き自己完結型トークンの形式
  • APIキー — APIアクセスに使うシンプルな固定文字列の認証情報
  • HTTPS / TLS — 通信を暗号化しAPI認証情報の盗聴を防ぐプロトコル
  • シングルサインオン(SSO) — 一度の認証で複数サービスにアクセスできる仕組み
  • ゼロトラスト — 「社内でも信頼しない」を前提にしたセキュリティモデル
  • REST APIHTTPベースのシンプルなAPI設計スタイル