トークンエンドポイント
■ Endpoint
POST /token
Request
■ Header
| Name | Required | Regex | Description |
|---|---|---|---|
| x-flow-type | ○ | ^AuthorizationCode$ | Authorization Code Flow 固定値 |
| Content-Type | ○ | - | application/x-www-form-urlencoded |
| Authorization | - | ^Basic .+$ | Basic認証を指定する場合に利用。Base64(クライアントID:クライアントシークレット) |
■ Query
なし
■ Body
| Name | Required | Regex | Description | ||
|---|---|---|---|---|---|
| grant_type | ○ | ^(authorization_code\ | refresh_token)$ | トークン発行方式。authorization_code または refresh_token |
|
| client_id | - | ^[0-9]{32}$ | Publicクライアントの場合のみ必須 | ||
| code | - | ^[A-Za-z0-9._~-]{20,}$ | grant_type=authorization_code の場合に必須 |
||
| code_verifier | - | ^[A-Za-z0-9._~-]{43,128}$ | grant_type=authorization_code の場合に必須 |
||
| redirect_uri | - | ^(https://.+\ | http://(localhost\ | osolab-[A-Za-z0-9-]+-local)(:[0-9]+)?(/.*)?)$ | grant_type=authorization_code の場合に必須。認可要求時と同一のURIを要求 |
| refresh_token | - | ^[A-Za-z0-9._~-]{20,}$ | grant_type=refresh_token の場合に必須 |
Response
■ Header
なし
■ Body
| Name | Type | Description |
|---|---|---|
| response_code | String | 正常時は 00000 を返却。 |
| access_token | String | 発行したアクセストークン。osolab_id_tokenid_client_id 形式 |
| refresh_token | String | 発行したリフレッシュトークン。osolab_id_tokenid_client_id 形式 |
| token_type | String | トークン種別。Bearer |
| expires_in | Number | アクセストークン有効期限秒数 |
| refresh_token_expires_in | Number | リフレッシュトークン有効期限秒数 |
| scope | String | 発行したスコープの空白区切り文字列 |
| id_token | String | grant_type=authorization_code の場合に発行したIDトークン |
■ トークン形式
| 項目 | 形式 | Description |
|---|---|---|
| access_token | ^[A-Fa-f0-9]{16}_[A-Fa-f0-9]{32}_[0-9]{32}$ |
osolab_id(HEX16)_token_id(HEX32)_client_id(数字32桁) |
| refresh_token | ^[A-Fa-f0-9]{16}_[A-Fa-f0-9]{32}_[0-9]{32}$ |
osolab_id(HEX16)_token_id(HEX32)_client_id(数字32桁) |
■ ResponseCode
| Code | HttpStatusCode | Description |
|---|---|---|
| 00000 | 200 | OK |
| 00001 | 400 | リクエストの内容が異常です |
| 00002 | 400 | 不正なクライアント |
| 00005 | 400 | リダイレクトURIが不正 |
| 00007 | 400 | 無効な grant(認可コード不正 / リフレッシュトークン不正 / クライアント不一致) |
| 90000 | 500 | ハンドルされていないエラーが発生しました |
■ 処理概要
grant_type=authorization_codeの場合:- 認可コードを取得し、有効期限と利用状態を検証する
- 認可コードに保持した
redirect_uriとリクエストのredirect_uriを完全一致で照合する code_verifierと認可コードに保存したcode_challengeを照合する- アクセストークン、リフレッシュトークン、IDトークンを発行する
grant_type=refresh_tokenの場合:- リフレッシュトークンを検証し、クライアント一致を確認する
- 旧リフレッシュトークンを失効して新しいトークンペアへローテーションする
Authorization: Basicが指定された場合は Basic認証を検証する- Basic認証が未指定の場合は
client_idを検証する - アクセストークンとリフレッシュトークンを返却する(
authorization_codeの場合はid_tokenも返却)