Bearer Token / RFC 6750

通信プロトコルHTTP

RFC 6750 とは?

 状態:-  閲覧数:2,039  投稿日:2016-04-29  更新日:2016-05-03
The OAuth 2.0 Authorization Framework: Bearer Token Usage
日本語訳
OAuth 2.0 Bearer Tokens 最新仕様 日本語訳
・OAuth 2.0の認証フレームワーク: Bearer Tokenの使用

「OAuth 2.0の保護リソースへアクセスするため, 署名無しトークンをHTTPリクエスト中でどのように利用するか」記述した仕様書
・HTTPリクエストに署名を使わずAccess Tokenのみを指定する方法を定義

Bearerとは? / Bearer Token とは? / 基本的な使い方

 閲覧数:169 投稿日:2016-04-30 更新日:2019-04-09 

Bearerとは?


(小切手・手形の)持参人


持参人とは?


「自分または所有者の名前を裏書きした」小切手、手形、債権または権利証券を持つ人

持参人払いとは


小切手などの証書で、特定の者を権利者として指定せず、それを持参した人に支払うこと

持参人払式小切手とは?


小切手金額の受取人を記名せず単に持参人に支払う旨記載された小切手
・引渡しによって譲渡でき、小切手の流通に最も適する
・銀行交付の小切手用紙はすべて持参人払式となっており、実際の小切手はほとんどこれである

Bearer Token とは?


Bearer は「持参人払い」から来ている
・トークンを持ってきた人に対して支払う(API 利用を許可する)、という意味

OAuth などのトークンに置き換えると
・Bearer トークンを使う場合、使用されるトークンが誰に対して発行されたのかを確認せずに、「トークンを持っていること」をベースに API 利用を許可する


誰に対して発行されたかを確認する例


ジャニーズのコンサート
・チケット+本人確認
→ Bearer トークンではない

ファンクラブ公演
・チケット+会員証もしくは身分表示
→ Bearer トークンではない


誰に対して発行されたかを確認しない例


転売可のコンサート
・チケットのみ必要
・本人確認不要
→ このチケットが、Bearer トークンに該当

基本的な使い方


Authorization: Bearer 取得したOAuth 2.0のToken

一般的には
・tokenの有効期限が設定されていてその期間内なら有効
・期限切れしている場合は、refresh tokenを使って更新

例外
・期限がない場合もある
・それぞれで調べるしかない

Twitter
・期限がないタイプ

OAuth 2.0のbearer token を毎回取得する必要はありますか?

RFC 6750 を実装した「Web API などのセキュリティで保護されたリソース」が返すエラー

 閲覧数:199 投稿日:2016-05-01 更新日:2016-05-03 
RFC 6750 を実装するセキュリティ保護リソース
・HTTP ステータス コードを発行

リクエストに認証の資格情報が含まれない場合、または、トークンが不足している場合
・レスポンスには "WWW-Authenticate" ヘッダーが含まれる

リクエストが失敗した場合
・リソース サーバーの応答には HTTP ステータス コードとエラー コードが付属している


失敗したリクエストとレスポンスの例1


クライアントリクエストに、必要なBearer Tokenがない
GET /resource HTTP/1.1 Host: service.contoso.com Authorization: Bearer

リソースからのレスポンスの HTTP 401 ステータス コードは、認証失敗を示す
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer authorization_uri="https://login.window.net/contoso.com/oauth2/authorize",  error="invalid_token",  error_description="The access token is missing.",


エラーのパラメーター


エラー応答内のパラメーター
Parameter description
authorization_uri 承認サーバーの URI (物理エンドポイント)。 この値は、探索エンドポイントからサーバーに関する詳細情報を取得するためのルックアップ キーとしても使用されます。
クライアントは、承認サーバーが信頼されていることを検証する必要があります。 リソースが Azure AD によって保護されている場合は、URL が https://login.windows.net または Azure AD がサポートする別のホスト名で始まることを確認すれば十分です。 テナント固有のリソースは、常に、テナント固有の承認 URI を返します。
Error 5.2 で定義されているエラー コード値、 OAuth 2.0 Authorization Frameworkです。 次の表で、Azure AD が返すエラー コードについて説明します。
error_description エラーの詳細な説明。 このメッセージは、エンド ユーザーにわかりやすく作られていません。
resource_id リソースの一意の識別子を返します。 クライアント アプリケーションは、この識別子を使用しての値として、 resource リソースのトークンを要求するときのパラメーター。
重要
クライアント アプリケーションは、値を確認する必要があります。 そうしないと、悪意のあるサービスが権限昇格攻撃を強制実行できる可能性があります。
攻撃を回避するための推奨される方針がいることを確認するには、 resource_id アクセスする web API URL のベースに一致します。 たとえば場合、 https://service.contoso.com/data がアクセスされている、 resource_id できます htttps://service.contoso.com/です。 クライアント アプリケーションを拒否する必要があります、 resource_id をで始まらないベースの URL が、id を確認する場合は、信頼性の高い代替方法がない限り、します。


Bearer スキーム エラー コード


RFC 6750 の仕様では、応答で WWW-Authenticate ヘッダーとベアラー スキームを使用するリソースのエラーとして、次のエラーを定義している
・次の表は、応答に出現する可能性がある HTTP ステータス コードとエラー コードの一覧を示す
HTTP コード: Error_Code description クライアント側の処理
400: invalid_request 要求の形式が正しくありません。 たとえば、パラメーターが足りないか、または同じパラメーターを 2 回使用しています。 エラーを修正してから、要求を再試行します。 この種類のエラーは開発時以外に発生させてはならず、初期テストで検出する必要があります。
401: invalid_token アクセス トークンがないか、無効になっているか、または失効しています。 値、 error_description パラメーターは、追加の詳細情報を提供します。 承認サーバーから新しいトークンを要求します。 新しいトークンが失敗した場合は、予期しないエラーが発生しました。 ランダムな遅延の後、ユーザーにエラー メッセージを送信し、再試行します。
403: insufficient_scope アクセス トークンに、リソースにアクセスするための偽装アクセス許可が含まれません。 新しい承認要求を認証エンドポイントに送信します。 応答に含まれている場合、 scope パラメーターでは、リソースへの要求のスコープの値を使用します。
403: insufficient_access トークンのサブジェクトに、リソースへのアクセスに必要なアクセス許可がありません。 別のアカウントを使用するか、指定のリソースへのアクセス許可を要求するようユーザーに促します。


問題のあるそのエラーレスポンスの例2


クライアント アプリケーションにはアクセス トークンがありますが、期限が切れている
GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer eyJ0e
//中略
f3CUQ

レスポンスでは、HTTP 401 ステータス コードとエラー、および error_description パラメーターを使用してエラーを記述
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer authorization_uri="https://login.window.net/contoso.com/oauth2/authorize", error="invalid_token", error_description="The access token is expired."

新旧認証認可仕様比較


Telnet / Windows7

RFC



週間人気ページランキング / 9-18 → 9-24
順位 ページタイトル抜粋 アクセス数
1 Nginx設定。エラーログレベル | Nginx(Webサーバ) 17
2 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 14
3 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 12
4 PHPのmb_send_mail関数でメール送信できない | メール処理システム 10
5 ImageMagick と imagick の違い | ImageMagick(ソフトウェアスイート) 9
6 さくらVPS0 8
6 tar: これは tar アーカイブではないようです 8
7 manページ日本語表示 | CentOS 7 (CentOS) 7
7 Reached target Shutdown メッセージが表示されたあと、シャットダウンまたは再起動プロセスがハングアップする | CentOS 7 (CentOS) 7
8 ABRT により 問題が検出されました | CentOS 7 (CentOS) 6
8 PHPファイルでchmodエラー | PHP(プログラミング言語) 6
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 6
8 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 6
9 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 5
9 echo と cat の違い 5
10 phpMyAdmin 4.4.3(phpMyAdmin) カテゴリー 4
10 6回目-10.Nginxでバーチャルホスト設定確認 | CentOS 7 2週間無料のお試し期間 6回目(さくらVPS) 4
10 「さくらVPS」で、「CentOS6」を「CentOS7」へ変更するためには? | CentOS 7 2週間無料のお試し期間 Link(さくらVPS) 4
10 cronで定期実行しているphpファイルを、コマンドライン経由で即時実行する | cron(Linuxコマンド) 4
10 MySQL 5.5 から 5.6 へのアップグレード | MySQL(データベース) 4
2021/9/25 1:01 更新