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

# ユーザー属性情報の提供方式と、各方式における Authlete の処理方法

> Authlete を用いて OpenID Connect 仕様に従いユーザー属性情報を提供する方法とその処理方法について。

## はじめに

Authlete を用いて OpenID Connect 仕様に従いユーザー属性情報を提供するには、アイデンティティ・プロバイダー (OpenID Provider; OP) がその情報をどのように取り扱うかを考慮し、ID トークンを用いる場合にはどのエンドポイントから返却するか、あるいは ID トークンではなく UserInfo エンドポイントを用いるかを選択します。

***

## ユーザー属性情報の提供方式

Authlete はユーザー属性情報の提供方式として以下の 3 つをサポートします。\
※ EP: エンドポイント

| 提供方式           | トークン EP から ID トークンとして提供                                                                                                                                          | 認可 EP から ID トークンとして提供                                                                                       | Userinfo EP からレスポンスとして提供                                                                                        |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| 認可リクエストのパラメーター | response\_type に code、scope に openid を含む                                                                                                                         | response\_type に id\_token を含む                                                                              | N/A                                                                                                             |
| Authlete API   | [/auth/authorization/issue](/api-reference/authorization-endpoint/issue-authorization-response)                                                                  | [/auth/authorization/issue](/api-reference/authorization-endpoint/issue-authorization-response)             | [/auth/userinfo/issue](/api-reference/userinfo-endpoint/issue-userinfo-response)                                |
| 処理の概要          | 認証リクエストを受けた OP は、Authlete に対し、パラメーターのひとつとしてユーザー情報を含めて、レスポンス生成を依頼する。Authlete は認可コード生成と同時に、受け取ったユーザー属性を含む ID トークンを生成し保管する。そしてトークン EP において、認可コードと引き換えに ID トークンを返却する | 認証リクエストを受けた OP は、Authlete に対し、パラメーターのひとつとしてユーザー情報を含めて、レスポンス生成を依頼する。Authlete は受け取ったユーザー属性を含む ID トークンを生成し返却する | UserInfo リクエストを受けた OP は、Authlete に対し、パラメーターのひとつとしてユーザー情報を含めて、レスポンス生成を依頼する。Authlete は受け取ったユーザー属性を含むレスポンスを生成し返却する |
| ユーザー属性の保持の有無   | 有。Authlete はユーザー属性を含む ID トークンを暗号化し、一時的にデータベースに格納する。ID トークンは有効期限切れの認可コードがクリーンアップされるまで保持される                                                                        | 無。Authlete はユーザー属性を保持しない                                                                                    | 無。Authlete はユーザー属性を保持しない                                                                                        |
| OP の構成         | 認可 EP とトークン EP を実装。それぞれのバックエンドとして Authlete を利用する                                                                                                                 | 認可 EP を実装。バックエンドとして Authlete を利用する                                                                          | 左記の EP に加えて Userinfo EP を実装。バックエンドとして Authlete を利用する                                                            |

<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/deployment/security/user-attributes-2_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=bb731a6a82535b80c58b52ddab755b8f" alt="user-attributes-2_ja" width="960" height="540" data-path="img/kb/ja/deployment/security/user-attributes-2_ja.png" />

*Providing ID Token from Token EP*

<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/deployment/security/user-attributes-1_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=d8dbb91a13bf525066734c1975e79790" alt="user-attributes-1_ja" width="960" height="540" data-path="img/kb/ja/deployment/security/user-attributes-1_ja.png" />

*Providing ID Token from Authorization EP*

<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/deployment/security/user-attributes-3_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=6e8ea4e41a5fd45bad360abaaf757d2d" alt="user-attributes-3_ja" width="960" height="540" data-path="img/kb/ja/deployment/security/user-attributes-3_ja.png" />

*Providing response from Userinfo EP*

***

## 方式選択の考えかた

* **基本的に、Authlete は OP から受け取ったユーザー属性情報を長期間保持することはありません。**

  * 認可 EP や UserInfo EP から提供する場合には、レスポンスを返却後、すぐにメモリ上から削除されます。
  * トークン EP から提供する場合には、認可コードの有効期限が切れてクリーンアップ処理が実行された段階で、データベース内から削除されます。

* 一時的かつ暗号化されているとしても **Authlete のデータベースにユーザー属性情報を格納することが許容できない場合**には、認可 EP もしくは Userinfo EP を用いることになります。

* もしさらに厳しい要件があり、**Authlete API にユーザー属性情報を渡すことも許されない場合**には、以下をご検討ください。

  * UserInfo EP からユーザー属性情報を提供する際に、Authlete にはアクセストークンの解析のみを依頼し、レスポンス自体は OP にて生成する。 具体的には、UserInfo リクエストを受け取った OP は以下の処理を行う。

    * [/auth/userinfo](/api-reference/userinfo-endpoint/process-userinfo-request)
      API を呼び出してリライングパーティが求めているユーザー属性情報を把握する。
    * 次に、[/auth/userinfo/issue](/api-reference/userinfo-endpoint/issue-userinfo-response)
      API を利用せずに、[仕様](https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse)
      に従いレスポンスを生成する。\\
      <img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/deployment/security/user-attributes-4_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=3f3b13e19986766adc794a270e8b6cf5" alt="user-attributes-4_ja" width="960" height="542" data-path="img/kb/ja/deployment/security/user-attributes-4_ja.png" />

  * Authlete の[オンプレミス向けパッケージ](/ja/deployment-and-operations/self-managed-deployment/self-managed-authlete-deployment-overview)
    を導入し、お客さまにて運用する。

* また別の観点として、運用上の要件から**インプリシットフローのサポートや UserInfo EP の提供が望ましくない場合**には、認可コードを用いて、かつトークン EP から ID トークンとして、ユーザー属性情報を返却する方式を選ぶことになります。

***

## 補足情報

* OAuth 2.0 / OIDC 実装の新アーキテクチャー

  * [4.2.1. Authlete 特化の細かい話](https://qiita.com/TakahikoKawasaki/items/b2a4fc39e0c1a1949aab#421-authlete-%E7%89%B9%E5%8C%96%E3%81%AE%E7%B4%B0%E3%81%8B%E3%81%84%E8%A9%B1)
