> ## Documentation Index
> Fetch the complete documentation index at: https://developers.authlete.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ユーザーがクライアントに付与した認可の取得・変更・取り消し

> ユーザーがクライアントに付与した認可の取得・変更・取り消しを行うAPIについて紹介します。

## はじめに

本記事では、ユーザーがクライアントに付与した認可の、取得・変更・取り消しを行う API の実行例を紹介します。 これらはたとえば以下の場合に有用です。

* ユーザー本人が API 事業者（認可サーバー）のサイトにログインし、自分がどのクライアントを認可しているかを確認する
* API 事業者がユーザーからの依頼に基づいて、特定のクライアントに発行したトークンを削除する

<img src="https://mintcdn.com/authlete/WGQFc11Y4wUplGrc/img/kb/ja/oauth-and-openid-connect/tokens/user-centric-token-management_ja.png?fit=max&auto=format&n=WGQFc11Y4wUplGrc&q=85&s=6d67114b7d90476fba07f6cf7c016f0f" alt="user-centric-token-management_ja" width="487" height="312" data-path="img/kb/ja/oauth-and-openid-connect/tokens/user-centric-token-management_ja.png" />

## 1. ユーザーが認可を付与した（トークンが発行された）クライアント一覧の取得

[/client/authorization/get/list API](/api-reference/client-management/get-authorized-applications) は、ある特定のユーザーが、どのクライアントに対して認可しているか（トークンを発行しているか）を、リストとして取得する APIです。

### リクエスト

GET もしくは POST にてリクエストを行います。

```
GET /api/client/authorization/get/list/<subject>
```

```
GET /api/client/authorization/get/list?subject=<subject>
```

```
POST /api/client/authorization/get/list
application/x-www-form-urlencoded
```

```
POST /api/client/authorization/get/list
application/json
```

リクエストパラメーターは以下の通りです。

| 項目        | 説明                       |
| --------- | ------------------------ |
| subject   | ユーザー一意識別子 **\*必須**       |
| start     | 検索結果の開始インデックス（デフォルト: 0）  |
| end       | 検索結果の終了インデックス （デフォルト: 5） |
| developer | 開発者識別子（デフォルト: null）      |

### レスポンス

### 成功レスポンス

ステータスコード 200 にて、以下のパラメーターを含む JSON が返却されます。

| 項目         | 説明                                                                                                                        |
| ---------- | ------------------------------------------------------------------------------------------------------------------------- |
| subject    | ユーザー一意識別子                                                                                                                 |
| start      | 検索結果の開始インデックス                                                                                                             |
| end        | 検索結果の終了インデックス                                                                                                             |
| developer  | 開発者識別子                                                                                                                    |
| totalCount | 該当するクライアントの総数                                                                                                             |
| clients    | クライアント情報の配列（クライアント情報のフォーマットは [/client/get API](https://docs.authlete.com/#client-get-api) 等の他の API レスポンスに含まれるクライアント情報と同一） |

### 失敗レスポンス

ステータスコード 400, 403, 500 などにて、以下の JSON が返却されます。

```
application/json
{
  "resultCode": ...,
  "resultMessage": ...
}
```

### 実行例

* リクエスト

以下はユーザー **"testuser01"** が認可を付与したクライアント一覧を取得するリクエストの例です。

```
curl -s -X POST $AL_API/client/authorization/get/list \
-u ...:... \
-H 'Content-type: application/json' \
-d **'{"subject":"testuser01"}'**
```

* レスポンス

clients にクライアント一覧を含むレスポンスが返却されます。

```
{
   "type": "authorizedClientListResponse",
**"clients": [
      {
         "clientId": 17566160603766,
         "clientIdAliasEnabled": false,
         "clientName": "FAPI Client",
         "developer": "authlete_14500880170338"
      }
   ],**   "end": 5,
   "start": 0,
   "totalCount": 1,
   "subject": "testuser01"
}
```

## 2. クライアントに付与した認可の範囲（トークンのスコープ）の変更

[/client/authorization/update API](http://localhost:3000/api-reference/client-management/update-client-tokens)
は、特定のクライアントに発行されているトークンのうち、あるユーザーが認可を付与したものについて、それらのトークンの認可範囲（スコープ）を変更する API です。

### リクエスト

POST にてリクエストを行います。URL の一部にクライアント ID (clientId) を指定します。

```
POST /api/client/authorization/update/<clientId>
application/x-www-form-urlencoded
```

```
POST /api/client/authorization/update/<clientId>
application/json
```

リクエストパラメーターは以下の通りです。

| 項目      | 説明                 |
| ------- | ------------------ |
| subject | ユーザー一意識別子 **\*必須** |
| scopes  | 新しいスコープ群の配列        |

* null でない値が指定された場合、それが新しいスコープ群として既存のアクセストークン群にセットされる
* Content-Type: application/x-www-form-urlencoded でリクエストする場合、scopes の値はスコープ名をスペース区切りで列挙したもの (フォームエンコード後は '+' での区切りとなる)
  |

### レスポンス

ステータスコード 200, 400, 403, 500 などにて、以下の JSON が返却されます。

```
application/json
{
  "resultCode": ...,
  "resultMessage": ...
}
```

### 実行例

* リクエスト

以下は、クライアント **"17566160603766"** に発行されているトークンのうち、\
ユーザー \*\*"testuser01" \*\*が認可を付与したものについて、それらのトークンの認可範囲（スコープ）を **"payment"** に変更するリクエストの例です。

```
curl -s -X POST $AL_API/client/authorization/update/**17566160603766** \
-u ...:... \
-H 'Content-type: application/json' \
-d '{
    **"subject":"testuser01", "scopes":"payment"**   }'
```

* レスポンス

アクセストークンが更新されたことを示すレスポンスが返却されます。

```
{
    "resultCode": "A138001",
    "resultMessage": "[A138001] **Updated 4 access token(s)** issued to the client (ID = 17566160603766) of the service (API Key = ...)."
}
```

## 3. クライアントに付与した認可の取消（発行したトークンの削除）

[/client/authorization/delete API](https://docs.authlete.com/#client-authorization-delete-api) は、特定のクライアントに発行されているトークンのうち、あるユーザーが認可を付与したものについて、それらのトークンを削除する API です。

### リクエスト

DELETE もしくは POST にてリクエストを行います。URL の一部にクライアント ID (clientId) を指定します。

```
DELETE /api/client/authorization/delete/<clientId>/<subject>
```

```
DELETE /api/client/authorization/delete/<clientId>?subject=<subject>
```

```
POST /api/client/authorization/delete/<clientId>
application/x-www-form-urlencoded
```

```
POST /api/client/authorization/delete/<clientId>
application/json
```

リクエストパラメーターは以下の通りです。

| 項目      | 説明                 |
| ------- | ------------------ |
| subject | ユーザー一意識別子 **\*必須** |

### レスポンス

ステータスコード 200, 400, 403, 500 などにて、以下の JSON が返却されます。

```
application/json
{
  "resultCode": ...,
  "resultMessage": ...
}
```

### 実行例

* リクエスト

以下は、クライアント **"17566160603766"** に発行されているトークンのうち、\
ユーザー \*\*"testuser01" \*\*が認可を付与したものについて、それらを削除するリクエストの例です。

```
curl -s -X POST $AL_API/client/authorization/delete/**17566160603766** \
-u ...:... \
-H 'Content-type: application/json' \
-d '{
    **"subject":"testuser01"**   }'
```

* レスポンス

アクセストークンが削除されたことを示すレスポンスが返却されます。

```
{
   "resultCode": "A137001",
   "resultMessage": "[A137001] **Deleted 4 access token(s)** issued to the client (ID = 17566160603766) of the service (API Key = ...)."
}
```
