Bearer tokenとは
認証(Authentication)と認可(Authorization)の違い
まず、Bearer tokenについてまとめる前に、認証と認可の違いについてまとめたいと思います。
- 認証 誰であるかを確認するプロセス
- 例:IDとパスワードの入力、指紋認証、など
- 認可 何ができるかを確認するプロセス
- 例:特定のファイルへのアクセス権限など
Bearer Tokenとは?
次に、Bearer tokenについてまとめたいと思います。Bearer tokenとは、HTTPのAuthorizationヘッダーで使用される、サーバーに対してクライアントのアクセス権限を証明するための文字列です。
Bearer認証のとは?
Bearer認証は、OAuth 2.0で定義されているアクセストークンの送信方式の一つです。HTTPリクエストの Authorization ヘッダーに Bearer {token} の形式でアクセストークンを含めることで、リソースサーバーに対してアクセス権を証明します。
- "Bearer" とは「持参人(保持者)」を意味し、トークンを持っている者が、そのトークンを提示することでアクセス権を証明できるという仕組みです。
- Bearer認証はOAuth 2.0の仕様の一部(RFC 6750)として定義されていますが、OAuth 2.0以外でも使用可能です。
OAuth 2.0ってなーに
OAuth 2.0は、認可(権限の委譲) を行うためのプロトコルです。アプリケーションがユーザーの認証情報(パスワードなど)を直接扱わずに、ユーザーのリソースへ安全にアクセスする権限を得られる仕組みです。
例:あるアプリがユーザーの許可を得て、Googleドライブのファイルにアクセスする、といった「サービス間の連携」を実現します。
なお、「Googleでログイン」のような認証機能は、OAuth 2.0だけでなくOpenID Connect(OAuth 2.0の拡張仕様)と組み合わせて実現されています。OAuth 2.0は本来「認可」のためのプロトコルであり、単体では「認証」には使えないため注意が必要です。
Bearer認証の仕組み
Bearer認証を使ったAPI呼び出しの一般的な流れは以下の通りです。
1. アクセストークンの取得
クライアントは、認可サーバー(Authorization Server)に対してアクセストークンを要求します。
OAuth 2.0の場合、認可コードフローなど複数のフロー(グラントタイプ)を使ってトークンを取得します。認可サーバーは、ユーザーの認証と認可を確認した後、アクセストークンをクライアントに発行します。
2. トークンを使ったAPIリクエスト
クライアントは、リソースサーバー(APIサーバー)にアクセスする際、リクエストヘッダーに以下の形式でトークンを含めます。
Authorization: Bearer <アクセストークン>
3. リソースサーバーでのトークン検証
リソースサーバーは受け取ったアクセストークンを検証します。
トークンが有効で、リクエストされたリソースへのアクセス権限(スコープ)があるかをチェックします。トークンが有効かつ権限があればリクエスト処理を継続します。
4. レスポンスの送信
検証に成功した場合、リソースサーバーはリクエストに対応するデータを返します。
トークンが無効・期限切れの場合は 401 Unauthorized、権限不足の場合は 403 Forbidden を返します。アクセストークンの有効期限は実装により異なりますが、一般的に15分〜1時間程度です。
Discussion