記事一覧に戻る
開発

SaaS APIの認証設計|APIキー管理とスコープベース権限制御の実装パターン

2026年3月30日 約9分で読めます
この記事でわかること
  • SaaS APIにおけるAPIキー認証とOAuth 2.0の使い分け
  • SHA-256ハッシュ化によるAPIキーの安全な保存・検証方法
  • スコープベースの権限制御と料金プラン連動の設計パターン
  • 業界標準のレート制限ヘッダーとレスポンス設計
  • IP制限・監査ログなど多層的なセキュリティ設計

なぜSaaS APIの認証設計が重要なのか

SaaSプロダクトにおいて、APIは外部システムとの連携やデータのやり取りを支える基幹インフラです。ここでの認証設計の判断は、セキュリティ・利便性・運用コストのすべてに直結します。

FUNBREWでは自社SaaSプロダクト「FUNBREW PDF」の開発を通じて、APIキー管理・スコープ制御・レート制限といった認証基盤を実装してきました。本記事では、その経験をもとに実践的な設計パターンを解説します。

API認証の設計は、プロダクトの初期段階で固めておくべき領域です。後からの変更はAPIの破壊的変更につながりやすく、既存の利用者に大きな影響を与えます。私たちもFUNBREW PDFの開発で、最初の設計判断がその後の開発速度と運用負荷を大きく左右することを実感しました。

認証設計で考慮すべきポイントは大きく3つあります。

  • APIキーの安全な管理:発行・保存・検証の仕組み
  • スコープベースの権限制御:誰がどのリソースにアクセスできるか
  • レート制限とアクセス制御:サービスの安定性を守る仕組み

これらはSaaSの開発工程全体のなかでも、初期段階で設計を固めておくべき領域です。後からの変更はAPIの破壊的変更につながりやすく、利用者への影響が大きいためです。

認証方式の選定:APIキー vs OAuth 2.0

SaaS APIの認証方式として代表的なのは、APIキー認証OAuth 2.0の2つです。どちらを選ぶかは、APIの利用シーンによって決まります。

APIキー認証が適するケース

  • サーバー間のB2B連携(バッチ処理、Webhook送信)
  • 管理画面や内部ツールからのAPI利用
  • シンプルな認可で十分なユースケース

OAuth 2.0が適するケース

  • エンドユーザーが直接操作するアプリケーション
  • サードパーティアプリへの認可委譲が必要な場合
  • ユーザーごとの細かいアクセス制御が必要な場合

多くのSaaSプロダクトでは、両方を併用するハイブリッド方式を採用しています。外部公開APIにはAPIキー認証、エンドユーザー向けにはOAuth 2.0という使い分けです。

本記事では、SaaSのバックエンドAPIで広く採用されているAPIキー認証を中心に解説します。

APIキー管理の設計パターン

APIキーの管理は「発行・保存・検証・失効」の4つのライフサイクルで考えます。それぞれに設計上の判断ポイントがあります。

1. APIキーの発行

APIキーの生成には、暗号学的に安全な乱数生成器を使用します。キーの長さは最低32文字が推奨されます。

設計のポイントは以下の通りです。

項目推奨理由
キー長32〜64文字ブルートフォース攻撃への耐性確保
文字種英数字(base62等)URLセーフかつ十分なエントロピー
プレフィックスあり(例: fb_live_)キーの用途やモードの識別を容易にする
表示回数発行時のみ1回プレーンテキストの露出を最小化

プレフィックスの工夫は運用面で大きな効果があります。たとえば、fb_live_(本番用)とfb_test_(テスト用)を使い分けることで、誤って本番APIキーをテスト環境で使ってしまう事故を防げます。

2. APIキーのハッシュ化保存

APIキーは平文で保存してはいけません。パスワードと同様に、ハッシュ化して保存します。

ここでの設計判断のポイントは、どのハッシュアルゴリズムを使うかです。

アルゴリズムAPIキー向きか理由
SHA-256適している高速。キーが十分長ければ安全
bcrypt不向きリクエストのたびに高コストな計算が発生
Argon2不向きbcryptと同様、レイテンシが問題になる

パスワードにはbcryptやArgon2が推奨されますが、APIキーの場合は事情が異なります。パスワードは人間が決めるため短く推測されやすいですが、APIキーは暗号学的に安全な乱数で生成された十分な長さを持っています。そのため、レインボーテーブル攻撃やブルートフォース攻撃のリスクが極めて低く、SHA-256で十分な安全性を確保できます。

APIリクエストの検証は毎回行われるため、ハッシュ計算の速度はレスポンスタイムに直結します。ここでbcryptを使うと、数十〜100ms程度のオーバーヘッドが全リクエストに加算されてしまいます。

3. APIキーの検証フロー

リクエスト受信からレスポンス返却までの認証フローは、以下のステップで構成します。

  1. リクエストヘッダーからAPIキーを抽出(X-API-KeyヘッダーまたはAuthorization: Bearer
  2. 受け取ったキーをSHA-256でハッシュ化
  3. ハッシュ値でデータベースを検索
  4. 該当するキーが見つかったら、有効期限・ステータスを確認
  5. スコープ(権限)の検証へ進む

この設計により、プレーンテキストのAPIキーがデータベースに存在しない状態を実現できます。たとえデータベースが流出しても、ハッシュ値から元のキーを復元することは計算上不可能です。

4. APIキーの失効とローテーション

APIキーには必ず失効の仕組みを設けます。設計上考慮すべき点は以下の通りです。

  • 有効期限:発行時に有効期限を設定可能にする
  • 手動無効化:管理画面から即時無効化できる
  • ローテーション支援:新旧キーの並行運用期間を設けて、移行中のダウンタイムをゼロにする
  • 最終使用日時の記録:使われていないキーの特定と削除に活用

ローテーション時に一瞬でもAPIが使えなくなると、利用者のシステムに影響が出ます。新しいキーを発行→利用者が切り替え→古いキーを無効化、という段階的な移行フローを提供することが重要です。

スコープベースの権限制御

APIキーで「誰か」を認証した後は、「何ができるか」を制御する認可の設計です。ここでは、スコープベースの権限制御パターンを解説します。

スコープの設計原則

スコープは「リソース:操作」の形式で設計するのが一般的です。

スコープ意味
blog:readブログ記事の読み取り
blog:writeブログ記事の作成・更新・削除
users:readユーザー情報の読み取り
analytics:read分析データの読み取り
admin:manage管理操作のフルアクセス

この設計には「最小権限の原則(Principle of Least Privilege)」を徹底します。たとえば、データ分析用の連携ではanalytics:readだけを付与し、データの書き換え権限は与えません。

スコープの粒度の考え方

スコープの粒度は、細かすぎても粗すぎても問題です。

  • 細かすぎる例:blog:create、blog:update、blog:delete、blog:publish、blog:unpublish …
  • 粗すぎる例:all:full_access
  • 適切な例:blog:read、blog:write、admin:manage

最初から細かく分けすぎると、APIキーの発行時にユーザーが選択肢に混乱します。readとwriteの2軸からスタートし、実際のユースケースに応じて細分化していくアプローチが現実的です。

スコープの検証フロー

各APIエンドポイントに必要なスコープを定義し、リクエスト処理の前に検証を行います。一般的なフローは以下の通りです。

  1. APIキー認証を通過(前述のフロー)
  2. 認証済みキーに紐づくスコープ一覧を取得
  3. リクエスト先のエンドポイントが要求するスコープと照合
  4. 必要なスコープがすべて含まれていれば許可、なければ403 Forbiddenを返却

重要なのは、スコープ不足時のエラーレスポンスで「どのスコープが不足しているか」を明示することです。これにより、API利用者は自力で問題を解決できます。

スコープとプランの連動

SaaSの料金プラン設計と連動させることで、プランごとに使えるAPIの範囲を制御できます。

プラン利用可能スコープ
無料プラン基本リソースのread
スタンダード基本リソースのread/write
プロフェッショナル全リソースのread/write
エンタープライズ全リソース + admin:manage

この設計により、アップセルの導線をAPIレベルで自然に組み込めます。

レート制限の設計

レート制限は、APIの安定性を守りつつ、利用者に公平なアクセスを提供するための仕組みです。マルチテナントSaaSでは特に重要になります。

レート制限の基本設計

レート制限は「単位時間あたりのリクエスト数上限」で定義します。一般的には、以下のように設計します。

プラン制限対象
無料プラン60回/分APIキー単位
スタンダード300回/分APIキー単位
プロフェッショナル600回/分APIキー単位
エンタープライズ1,200回/分(カスタム可)APIキー単位

レスポンスヘッダーによる残量通知

業界標準のレート制限ヘッダー(X-RateLimit-Limit等、GitHub・Stripeなど主要APIが採用)をレスポンスに含めることで、API利用者は残りのリクエスト数を把握できます。

ヘッダー意味
X-RateLimit-Limit単位時間あたりの上限数
X-RateLimit-Remaining残りのリクエスト可能数
X-RateLimit-Reset制限がリセットされるUNIXタイムスタンプ
Retry-After429応答時の待機推奨秒数

これらのヘッダーを提供することで、利用者側でリクエスト頻度を自動調整する仕組み(バックオフ処理)を実装しやすくなります。

429 Too Many Requestsの設計

レート制限を超過した場合は、HTTPステータス429を返却します。レスポンスボディには以下を含めます。

  • エラーメッセージ(人間が読める説明)
  • 現在の制限値
  • リセットまでの待機時間
  • プランアップグレードの案内(オプション)

重要なのは、429レスポンスで既存のリクエスト処理を中断しないことです。処理中のリクエストはそのまま完了させ、新規リクエストのみを制限する設計にします。

IP制限の追加レイヤー

APIキー認証とスコープ制御に加えて、IPアドレスによるアクセス制限を追加のセキュリティレイヤーとして提供できます。

CIDR表記によるサブネット指定

単一IPだけでなく、CIDRサブネット(例:192.168.1.0/24)での指定に対応することで、企業のネットワーク環境に柔軟に対応できます。

IP制限の設計ポイントは以下の通りです。

  • 許可IPリストはAPIキーごとに設定可能にする
  • CIDR表記(/8 〜 /32)をサポート
  • IPv4とIPv6の両方に対応
  • IP制限が未設定の場合はすべてのIPを許可(オプトイン方式)

この設計により、セキュリティ要件の厳しいエンタープライズ顧客のニーズに対応しつつ、小規模利用者には手軽さを維持できます。

セキュリティ上の考慮事項

認証基盤の設計では、以下のセキュリティ対策も合わせて実装します。SaaSのセキュリティ対策の詳細も参考にしてください。

通信のセキュリティ

  • HTTPS必須:APIキーが平文で流れるHTTPは絶対に許可しない
  • HSTS設定:HTTPからHTTPSへの強制リダイレクト

ログと監査

  • APIキーの発行・無効化・スコープ変更をすべて監査ログに記録
  • 認証失敗のログを記録し、異常なパターン(短時間に大量の認証失敗)を検知
  • 最終使用日時・使用元IPを記録し、不正使用の早期発見に活用

エラーレスポンスの設計

  • 認証失敗時に「APIキーが無効」と「APIキーが存在しない」を区別しない(情報漏洩防止
  • 一律で401 Unauthorizedを返却し、詳細な原因は内部ログにのみ記録
  • 認可失敗(スコープ不足)は403 Forbiddenで返却し、不足スコープを明示

まとめ:堅牢なAPI認証基盤の設計指針

SaaS APIの認証設計は、以下の3つの柱で構成されます。

  1. APIキー管理:SHA-256ハッシュ化保存、プレフィックス設計、ローテーション支援
  2. スコープベース権限制御:リソース:操作の粒度設計、最小権限の原則、プラン連動
  3. レート制限:プラン別上限、業界標準ヘッダー、429応答設計

これらを組み合わせることで、セキュリティと利便性のバランスが取れた認証基盤を構築できます。

FUNBREWでは、自社SaaSプロダクト「FUNBREW PDF」の開発で培った知見をもとに、システム開発のご支援を行っています。API設計や認証基盤の構築でお悩みの方は、ぜひお気軽にご相談ください

よくある質問
APIキーとOAuth 2.0はどちらを選ぶべきですか?
サーバー間通信(B2B連携やバッチ処理)にはAPIキー認証が適しています。ユーザーが直接操作するアプリケーション(ログインが必要な画面)にはOAuth 2.0が適しています。多くのSaaSでは、外部公開APIにはAPIキー、エンドユーザー向け機能にはOAuthと使い分けるハイブリッド方式を採用しています。
APIキーをハッシュ化して保存するメリットは何ですか?
データベースが漏洩した場合でも、ハッシュ化されたAPIキーからは元の値を復元できません。パスワードのハッシュ化と同様の考え方ですが、APIキーは十分な長さ(32文字以上)があるため、SHA-256のような高速ハッシュでも安全に運用できます。bcryptのようなコスト付きハッシュは、APIリクエストのたびに実行すると性能面で課題が出るため、APIキーにはSHA-256が適しています。
スコープの粒度はどの程度が適切ですか?
「リソース名:操作」の形式(例: blog:read、blog:write)で設計するのが一般的です。粒度が細かすぎると管理が煩雑になり、粗すぎると不要な権限まで付与してしまいます。まずはリソース単位×読み書きの2軸で設計し、必要に応じて細分化していくアプローチが実践的です。
APIのレート制限は具体的にどう設定すべきですか?
プラン別に上限を設定し、レスポンスヘッダー(X-RateLimit-Limit、X-RateLimit-Remaining、Retry-After)で残り回数を通知します。一般的な目安として、無料プランは60回/分、有料プランは300〜1,000回/分程度です。429 Too Many Requestsレスポンスと合わせて実装することで、RFC準拠のAPI設計になります。
SaaS APIの認証設計を外部に依頼する場合の費用感は?
認証基盤の設計・実装は、APIキー管理+スコープ制御+レート制限で200〜500万円程度が目安です。OAuth 2.0の実装やマルチテナント対応まで含めると500〜1,000万円程度になることもあります。FUNBREWでは要件に応じた最適なプランをご提案していますので、まずはお気軽にご相談ください。

SaaS開発のAPI設計でお悩みですか?

FUNBREWでは、自社SaaSプロダクトの開発経験をもとに、API設計・認証基盤の構築をサポートしています。

この記事をシェア

SaaS開発・API設計のご相談はFUNBREWへ

認証基盤の設計からプロダクト全体のアーキテクチャまで、SaaS開発のあらゆるフェーズをご支援します。まずはお気軽にご相談ください。

最新情報をお届けします

IT活用のヒントやお役立ち情報を定期的にお届けします。

関連記事

開発
2026年3月30日

SaaSのWebhook配信設計|HMAC署名・リトライ・監査ログのイベント駆動アーキテクチャ

SaaSプロダクトにおけるWebhook配信の設計パターンを解説。HMAC署名による検証、指数バックオフのリトライ、監査ログの設計を、自社プロダクトの実装経験にもとづいて紹介します。

開発
2026年3月30日

デュアルPDFエンジン戦略|Chromium(Gotenberg)とwkhtmltopdfの使い分けとフォールバック設計

PDF生成エンジンを2つ並行運用する「デュアルエンジン戦略」を解説。Gotenberg(Chromium)とwkhtmltopdfの特性比較、ユースケース別の選定基準、フォールバック設計の実践パターンを紹介します。

開発
2026年3月30日

APIレート制限の実装パターン|プラン別制御からRFC準拠ヘッダーまで徹底解説

APIレート制限の設計パターンを、アルゴリズム選定・プラン別制御・RFC準拠ヘッダー・エラーハンドリングの観点から解説。SaaSプロダクトの実装経験にもとづく実践的なアプローチを紹介します。

AI・DX
2026年3月8日

マルチテナントSaaSの設計と実装|アーキテクチャの選び方

マルチテナントアーキテクチャはSaaS開発の根幹をなす設計パターンです。1つのアプリケーションを複数の企業(テナント)が共有して利用するため、「テナント間のデータをどう分離するか」が最大の設計判断になります。 分離レベルは大きく3つ:DB分離型、スキーマ分離型、行レベル分離型です。

相談のハードル、下げました

まずは気軽にご相談ください

「まだ具体的に決まっていない」「とりあえず話を聞きたい」でも大丈夫。プロトタイプを見ながら、一緒にアイデアを形にしていきましょう。

相談無料 オンライン対応 1週間でプロトタイプ