メインコンテンツへスキップ

はじめに

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

Web API の実装

Authlete は、クライアントアプリ開発者コンソールのログイン ID とパスワードの検証、そしてアクセス資格確認を、外部の Web API に移譲できます。この Web API は少なくとも以下の処理を行う必要があります。
  1. Authlete からリクエストを受信
  2. Authorization ヘッダーの検証
  3. ID/パスワードからユーザーを識別
  4. Authlete サービスへのアクセス資格の確認
  5. Authlete 内のユーザー識別子・表示名の決定
  6. Authlete にレスポンスを返却
developer-auth-cb_ja 仕様の詳細は以下をご参照ください。

Authlete サービスの設定

Authlete のサービス管理者コンソールにて、対象の Authlete サービスに対して、外部の Web API に接続するための情報を設定します。
タブ項目
開発者認証開発者認証コールバックエンドポイントWeb API のエンドポイント URL
開発者認証開発者認証コールバック API キーAPI アクセス時の Basic 認証のための API キー
開発者認証開発者認証コールバック API シークレットAPI アクセス時の Basic 認証のための API シークレット
Screen_Shot_2020-08-13_at_3
「開発者認証」タブに表示される「SNS」関連の設定は deprecated となっており、利用できません。
以上により、対象の Authlete サービスは、クライアントアプリ開発者コンソールへのログインについて、ID / パスワードの照合とアクセス資格確認を Web API に移譲するようになります。

実行例

ここでは、お客さまの環境において、クライアントアプリ開発者を次のように管理しているとします。
  • ユーザー情報
IDパスワードステータスグループ
test1test1activeDev 01
test2test2activeDev 01
test3test3activeDev 02
test4test4suspendedDev 02
  • グループ情報
グループAuthlete 内でのユーザー識別子Authlete 内でのユーザー表示名ステータス
Dev 01dev01Developer Group 01active
Dev 02dev02Developer Group 02active
以下、それぞれの ID を用いたログインに対して期待される動作の例を示します。

例 1: test1/test1 でログイン

まず、クライアントアプリ開発者コンソールにて、ユーザーが test1/test1 でログインを試みたとします。 multiple-developer-accounts_1 開発者認証が設定されている 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"}
ユーザーに対しては以下のようなログイン後のページが表示されます。 multiple-developer-accounts_2 以下はログイン後に「アプリ作成」をクリックし、新規にクライアント情報を登録した例です。“Test Client 01” が、Developer Group 01 (Authlete の subject としては “dev01”) に対して追加された状態です。 multiple-developer-accounts_3

例 2: test2/test2 でログイン

次に、クライアントアプリ開発者コンソールからログアウトし、test2/test2 でログインを試みたとします。multiple-developer-accounts_4 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 にてログインして追加したクライアント情報が表示されます。\ multiple-developer-accounts_5

例 3: test3/test3 でログイン

それでは、グループの異なる ID でログインした場合はどうなるでしょうか。クライアントアプリ開発者コンソールからログアウトし、test3/test3 でログインを試みたとします。 multiple-developer-accounts_6 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 にてログインして追加したクライアント情報が表示されないことにご注目ください。 multiple-developer-accounts_7

例 4: test4/test4 でログイン

最後に、test4/test4 でログインを試みた場合です。\ multiple-developer-accounts_8 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 はログインを拒否します。 multiple-developer-accounts_9 以上のように動作する Web API を実装することにより、複数のユーザーが、それぞれ異なる ID/パスワードを用いて、クライアントアプリ開発者コンソールにログインできるようになります。