> ## 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.

# 複数の開発者アカウントの利用

> 複数の開発者がクライアント情報を個別に管理するためのWeb APIの実装とAuthleteの設定についての記事です。

## はじめに

本記事では、複数の開発者がそれぞれクライアントアプリ開発者コンソールへのログインアカウントを持ち、各人が個別にクライアント情報を管理するための、Web API の実装と Authlete の設定について説明します。

***

## Web API の実装

Authlete は、クライアントアプリ開発者コンソールのログイン ID とパスワードの検証、そしてアクセス資格確認を、外部の Web API に移譲できます。この Web API は少なくとも以下の処理を行う必要があります。

1. Authlete からリクエストを受信
2. Authorization ヘッダーの検証
3. ID/パスワードからユーザーを識別
4. Authlete サービスへのアクセス資格の確認
5. Authlete 内のユーザー識別子・表示名の決定
6. Authlete にレスポンスを返却

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/developer-auth-cb_ja.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=04a9c1bc7ef9008a6c7b37dc615cfcfd" alt="developer-auth-cb_ja" width="963" height="402" data-path="img/kb/ja/deployment/developer-console/developer-auth-cb_ja.png" />

仕様の詳細は以下をご参照ください。

* [開発者認証コールバック](https://www.authlete.com/ja/developers/definitive_guide/developer_authentication_callback/)
* [サービスの設定項目 - 開発者認証](/ja/configuration-reference/service-settings/service-management)

***

## Authlete サービスの設定

Authlete のサービス管理者コンソールにて、対象の Authlete サービスに対して、外部の Web API に接続するための情報を設定します。

| タブ    | 項目                     | 値                                  |
| ----- | ---------------------- | ---------------------------------- |
| 開発者認証 | 開発者認証コールバックエンドポイント     | Web API のエンドポイント URL               |
| 開発者認証 | 開発者認証コールバック API キー     | API アクセス時の Basic 認証のための API キー     |
| 開発者認証 | 開発者認証コールバック API シークレット | API アクセス時の Basic 認証のための API シークレット |

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/Screen_Shot_2020-08-13_at_3.14.24_PM.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=bf7465d7ff3cd7000159995fc0c891eb" alt="Screen_Shot_2020-08-13_at_3" width="764" height="538" data-path="img/kb/ja/deployment/developer-console/Screen_Shot_2020-08-13_at_3.14.24_PM.png" />

> 「開発者認証」タブに表示される「SNS」関連の設定は deprecated となっており、利用できません。

以上により、対象の Authlete サービスは、クライアントアプリ開発者コンソールへのログインについて、ID / パスワードの照合とアクセス資格確認を Web API に移譲するようになります。

***

## 実行例

ここでは、お客さまの環境において、クライアントアプリ開発者を次のように管理しているとします。

* ユーザー情報

| ID    | パスワード | ステータス     | グループ   |
| ----- | ----- | --------- | ------ |
| test1 | test1 | active    | Dev 01 |
| test2 | test2 | active    | Dev 01 |
| test3 | test3 | active    | Dev 02 |
| test4 | test4 | suspended | Dev 02 |

* グループ情報

| グループ   | Authlete 内でのユーザー識別子 | Authlete 内でのユーザー表示名 | ステータス  |
| ------ | ------------------- | ------------------- | ------ |
| Dev 01 | dev01               | Developer Group 01  | active |
| Dev 02 | dev02               | Developer Group 02  | active |

以下、それぞれの ID を用いたログインに対して期待される動作の例を示します。

### 例 1: test1/test1 でログイン

まず、クライアントアプリ開発者コンソールにて、ユーザーが **test1/test1** でログインを試みたとします。

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_1.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=996eba3e85433f530082a586412b3274" alt="multiple-developer-accounts_1" width="969" height="687" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_1.png" />

開発者認証が設定されている Authlete サービスは、Web API に対して以下のようなリクエストを送信します。（以下、それぞれの例は見やすさのため折り返しています）

```
POST / HTTP/1.1
Accept: application/json
Authorization: Basic base64(<API Key>:<API Secret>)
Content-Type: application/json
Host: <Web API Hostname>
...
{"expiresIn": 0,
"id": "test1",
"password": "test1",
"serviceApiKey": <Service API Key>}
```

リクエストを受けた Web API では、subject が **dev01**、displayName が **Developer Group 01** であると決定し、Authlete にレスポンスを返却するでしょう。

```
HTTP/1.1 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 70
{"authenticated":true, "subject":"dev01", "displayName":"Developer Group 01"}
```

ユーザーに対しては以下のようなログイン後のページが表示されます。

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_2.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=466b527e766d73d04964c836fa100b6e" alt="multiple-developer-accounts_2" width="969" height="687" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_2.png" />

以下はログイン後に「アプリ作成」をクリックし、新規にクライアント情報を登録した例です。“Test Client 01” が、Developer Group 01 (Authlete の subject としては “dev01”) に対して追加された状態です。

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_3.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=0acc094980fb16551d00e272e29c2870" alt="multiple-developer-accounts_3" width="969" height="687" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_3.png" />

### 例 2: test2/test2 でログイン

次に、クライアントアプリ開発者コンソールからログアウトし、**test2/test2** でログインを試みたとします。<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_4.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=9ae80d9c58e1a5084c2d2816aedbe517" alt="multiple-developer-accounts_4" width="392" height="332" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_4.png" />

Authlete サービスが Web API に送信するリクエストは以下のようになります。

```
POST / HTTP/1.1
Accept: application/json
Authorization: Basic base64(<API Key>:<API Secret>)
Content-Type: application/json
Host: <Web API Hostname>
...
{"expiresIn":0,
"id":"test2",
"password":"test2",
"serviceApiKey":<Service API Key>}
```

Web API は、先ほどの test1 のときと同様、subject が **dev01**、displayName が **Developer Group 01** であると決定し、Authlete にレスポンスを返却するでしょう。

```
HTTP/1.1 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 70
{"authenticated":true, "subject":"dev01", "displayName":"Developer Group 01"}
```

その結果、ログイン後のページは以下のようになります。先ほど test1 にてログインして追加したクライアント情報が表示されます。\\

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_5.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=ebf6c0d86e06c70817687239f4147d1b" alt="multiple-developer-accounts_5" width="983" height="452" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_5.png" />

### 例 3: test3/test3 でログイン

それでは、グループの異なる ID でログインした場合はどうなるでしょうか。クライアントアプリ開発者コンソールからログアウトし、**test3/test3** でログインを試みたとします。

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_6.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=e4698a760750721e7a1c3cfdf1b92aa5" alt="multiple-developer-accounts_6" width="399" height="327" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_6.png" />

Authlete サービスが Web API に送信するリクエストは以下のようになります。

```
POST / HTTP/1.1
Accept: application/json
Authorization: Basic base64(<API Key>:<API Secret>)
Content-Type: application/json
Host: <Web API Hostname>
...
{"expiresIn":0,
"id":"test3",
"password":"test3",
"serviceApiKey":<Service API Key>}
```

Web API は、subject が **dev02**、displayName が **Developer Group 02** であると決定し、Authlete にレスポンスを返却するでしょう。

```
HTTP/1.1 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 70
{
  "authenticated": true,
  "subject": "dev02",
  "displayName": "Developer Group 02"
}
```

その結果ユーザーは、先ほどとは異なる subject である **dev02** としてログインします。 test1 にてログインして追加したクライアント情報が表示されないことにご注目ください。

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_7.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=785afceaaee3de22c45ccc884d93bc6e" alt="multiple-developer-accounts_7" width="970" height="413" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_7.png" />

### 例 4: test4/test4 でログイン

最後に、**test4/test4** でログインを試みた場合です。\\

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_8.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=795a116fc06d8256742a6187fbb18b3a" alt="multiple-developer-accounts_8" width="396" height="327" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_8.png" />

Authlete から Web API へのリクエストは以下のようになります。

```
POST / HTTP/1.1
Accept: application/json
Authorization: Basic base64(<API Key>:<API Secret>)
Content-Type: application/json
Host: <Web API Hostname>
...
{
  "expiresIn":0,
  "id":"test4",
  "password":"test4",
  "serviceApiKey":<Service API Key>
}
```

test4 のステータスは **suspended** であるため、ログインを拒否することが期待されます。Web API は以下のレスポンスを返却するでしょう。

```
HTTP/1.0 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 24
{"authenticated":false}
```

このレスポンスを受けて、Authlete はログインを拒否します。

<img src="https://mintcdn.com/authlete/KNbgpS77nJg5j2Vw/img/kb/ja/deployment/developer-console/multiple-developer-accounts_9.png?fit=max&auto=format&n=KNbgpS77nJg5j2Vw&q=85&s=1f8447d595b01f13352e44b7275003c6" alt="multiple-developer-accounts_9" width="399" height="356" data-path="img/kb/ja/deployment/developer-console/multiple-developer-accounts_9.png" />

以上のように動作する Web API を実装することにより、複数のユーザーが、それぞれ異なる ID/パスワードを用いて、クライアントアプリ開発者コンソールにログインできるようになります。
