5. アクセストークンの発行 (Issuing an Access Token)
アクセストークンリクエストが有効で認可されている場合、認可サーバー (Authorization Server) は、セクション5.1で説明されているように、アクセストークン (Access Token) とオプションのリフレッシュトークン (Refresh Token) を発行します。リクエストがクライアント認証に失敗したか無効である場合、認可サーバーは、セクション5.2で説明されているように、エラーレスポンスを返します。
5.1. 成功レスポンス (Successful Response)
認可サーバーは、アクセストークン (Access Token) とオプションのリフレッシュトークン (Refresh Token) を発行し、200 (OK) ステータスコードを持つ HTTP レスポンスのエンティティボディに次のパラメータを追加することで、レスポンスを構築します。
access_token
必須である (REQUIRED)。認可サーバーによって発行されたアクセストークン。
token_type
必須である (REQUIRED)。セクション7.1で説明されている発行されたトークンのタイプ。値は大文字と小文字を区別しません。
expires_in
推奨される (RECOMMENDED)。アクセストークンのライフタイム(秒単位)。たとえば、値「3600」は、レスポンスが生成された時刻から1時間でアクセストークンが期限切れになることを示します。省略された場合、認可サーバーは、他の手段を介して有効期限を提供するか、デフォルト値をドキュメント化すべきです (SHOULD)。
refresh_token
任意である (OPTIONAL)。セクション6で説明されているように、同じ認可グラント (Authorization Grant) を使用して新しいアクセストークンを取得するために使用できるリフレッシュトークン (Refresh Token)。
scope
任意である (OPTIONAL)。クライアントによってリクエストされたスコープ (Scope) と同一の場合。それ以外の場合は必須です (REQUIRED)。セクション3.3で説明されているアクセストークンのスコープ。
パラメータは、[RFC4627] で定義されている application/json メディアタイプを使用して、HTTP レスポンスのエンティティボディに含まれます。パラメータは、各パラメータを最上位の構造レベルに追加することで、JavaScript Object Notation (JSON) 構造にシリアライズされます。パラメータ名と文字列値は、JSON 文字列として含まれます。数値は、JSON 数値として含まれます。パラメータの順序は重要ではなく、変化する可能性があります。
認可サーバーは、トークン、認証情報、またはその他の機密情報を含むすべてのレスポンスに、値が「no-store」の HTTP「Cache-Control」レスポンスヘッダーフィールド [RFC2616] と、値が「no-cache」の「Pragma」レスポンスヘッダーフィールド [RFC2616] を含めなければなりません (MUST)。
たとえば:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
クライアントは、レスポンス内の認識されない値名を無視しなければなりません (MUST)。認可サーバーから受信したトークンおよびその他の値のサイズは、未定義のままです。クライアントは、値のサイズに関する仮定を避けるべきです (SHOULD)。認可サーバーは、発行するすべての値のサイズをドキュメント化すべきです (SHOULD)。
5.2. エラーレスポンス (Error Response)
認可サーバーは、HTTP 400 (Bad Request) ステータスコード (特に指定されていない限り) で応答し、レスポンスに次のパラメータを含めます。
error
必須である (REQUIRED)。単一の ASCII [USASCII] エラーコード。次のいずれかです。
-
invalid_request- リクエストに必須パラメータが欠落している、サポートされていないパラメータ値が含まれている (グラントタイプを除く)、パラメータが繰り返されている、複数の認証情報が含まれている、クライアントを認証するために複数のメカニズムが使用されている、または他の形式で不正である。 -
invalid_client- クライアント認証に失敗しました (たとえば、不明なクライアント、クライアント認証が含まれていない、またはサポートされていない認証方法)。認可サーバーは、HTTP 401 (Unauthorized) ステータスコードを返して、クライアントによってサポートされている HTTP 認証スキームを示すことができます (MAY)。クライアントが HTTP Basic 認証スキーム経由でパスワードを使用しようとした場合、認可サーバーは、HTTP 401 (Unauthorized) ステータスコードを返さなければなりません (MUST NOT)。 -
invalid_grant- 提供された認可グラント (Authorization Grant) (たとえば、認可コード (Authorization Code)、リソースオーナークレデンシャル (Resource Owner Credentials)) またはリフレッシュトークン (Refresh Token) が無効、期限切れ、取り消されている、認可リクエストで使用されたリダイレクション URI と一致しない、または別のクライアントに発行されました。 -
unauthorized_client- 認証されたクライアントは、この認可グラントタイプ (Authorization Grant Type) を使用することが認可されていません。 -
unsupported_grant_type- 認可グラントタイプが認可サーバーによってサポートされていません。 -
invalid_scope- リクエストされたスコープが無効、不明、不正な形式、またはリソースオーナーによって許可されたスコープを超えています。
パラメータ値には、%x20-21 / %x23-5B / %x5D-7E の文字セットから文字を含めてはなりません (MUST NOT)。
error_description
任意である (OPTIONAL)。追加情報を提供する人間が読める ASCII [USASCII] テキスト。クライアント開発者がエラーを理解するのに役立ちます。パラメータ値には、%x20-21 / %x23-5B / %x5D-7E の文字セットから文字を含めてはなりません (MUST NOT)。
error_uri
任意である (OPTIONAL)。エラーに関する情報を含む人間が読める Web ページを識別する URI。クライアント開発者にエラーに関する追加情報を提供するために使用されます。パラメータ値は、[RFC3986] のセクション2で定義されている URI 参照構文に準拠しなければならず (MUST)、%x21 / %x23-5B / %x5D-7E の文字セットから文字を含めてはなりません (MUST NOT)。
パラメータは、[RFC4627] で定義されている application/json メディアタイプを使用して、HTTP レスポンスのエンティティボディに含まれます。パラメータは、各パラメータを最上位の構造レベルに追加することで、JavaScript Object Notation (JSON) 構造にシリアライズされます。パラメータ名と文字列値は、JSON 文字列として含まれます。数値は、JSON 数値として含まれます。パラメータの順序は重要ではなく、変化する可能性があります。
たとえば:
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error":"invalid_request"
}