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

# FAPI の機能を利用する

> Authlete で FAPI の機能を有効にする方法と、サービス・クライアント・リクエストに必要な設定について解説します。

<Info>
  **Authlete 2.x** のドキュメントは [2.x 版](/ja/v2/protocols-and-flows/compliance-profiles/how-to-use-fapi)をご覧ください。
</Info>

## 概要

本ドキュメントでは、Authlete で **FAPI** の機能を利用するための具体的な方法について解説します。

Authlete は FAPI 1.0 と FAPI 2.0 の両方をサポートします。どちらの場合も、どのプロファイルを適用するかを Authlete に伝える方法は共通です。本ドキュメントの前半でその共通のしくみを説明し、後半では FAPI 1.0 の各プロファイルについて、サービス・クライアント・リクエストに必要な設定を解説します。

### 各プロファイルの詳細

| プロファイル   | 参照先                                                                                                                                                                                                                                                                                                                                                                                               |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| FAPI 1.0 | 構築手順を一通りたどるチュートリアル: [Financial-grade API (FAPI) 1.0 Basics](/ja/protocols-and-flows/compliance-profiles/fapi-basics)<br />FAPI モードで追加される検証項目: [FAPI モードにおける追加検証項目](/ja/protocols-and-flows/compliance-profiles/validation-in-fapi-mode)                                                                                                                                                           |
| FAPI 2.0 | 概要: [FAPI 2.0](/ja/protocols-and-flows/compliance-profiles/fapi-2-0)<br />認可コードフロー: [FAPI 2.0 Security Profile における認可コードフロー](/ja/protocols-and-flows/compliance-profiles/authorization-code-flow-in-fapi-2-0-security-profile)<br />認可リクエストの署名: [FAPI 2.0 メッセージ署名プロファイル: 認可リクエストの署名](/ja/protocols-and-flows/compliance-profiles/fapi-2-0-message-signing-profile-signing-authorization-requests) |

## はじめに

### Authlete がサポートする FAPI

Authlete は **FAPI 1.0** と **FAPI 2.0** の両方をサポートします。

FAPI 1.0 と 2.0 には、それぞれ複数のセキュリティープロファイルがあります。各セキュリティープロファイルにおける認可サーバーの要件は異なっており、どちらのプロファイルに従うかによって認可サーバーの振る舞いも異なります。

FAPI の機能を有効にするには、FAPI における要求事項を満たすようにサービスおよびクライアントを適切に設定したうえで、どのプロファイルを適用するかを Authlete に伝える必要があります。

### プロファイルの指定方法

プロファイルの指定方法は 2 通りあります。

| 指定方法          | 設定場所                     | 適用範囲                             |
| ------------- | ------------------------ | -------------------------------- |
| 静的な設定         | サービスまたはクライアントの「FAPI モード」 | 対象のサービス全体、または対象のクライアントからのリクエスト全体 |
| スコープ属性による動的判定 | スコープの属性                  | リクエストごと。リクエストに含まれるスコープの属性で決まります  |

静的な設定を使うと、そのサービスまたはクライアントのすべてのリクエストに同じプロファイルが適用されます。準拠レベルの異なる複数のクライアントを 1 つの認可サーバーで収容する場合は、クライアントごとに「FAPI モード」を設定するか、スコープ属性による動的判定を使います。

<Note>
  「FAPI モード」はサービスとクライアントの設定項目で、Authlete 3.0 で追加されました。Authlete 2.x にはスコープ属性による動的判定のみがあります。
</Note>

### Authlete がプロファイルを決定する順序

Authlete は、リクエストごとに以下の順序で適用するプロファイルを決定します。先に条件を満たしたものが採用され、それ以降は評価されません。

1. Authlete サーバーで FAPI 機能が有効でない場合、通常の OAuth 2.0 / OpenID Connect の仕様に従います。
2. サービスの「指定可能なサービスプロファイル」で FAPI が有効でない場合、通常の OAuth 2.0 / OpenID Connect の仕様に従います。
3. サービスの「**FAPI モード**」が設定されていれば、その値に従います。
4. クライアントの「**FAPI モード**」が設定されていれば、その値に従います。
5. リクエストに含まれる (あるいは関連付けられる) スコープの属性に従います。
6. いずれにも該当しない場合、通常の OAuth 2.0 / OpenID Connect の仕様に従います。

<Warning>
  サービスに「FAPI モード」を設定すると、そのサービスへのすべてのリクエストがそのモードで処理され、クライアントの「FAPI モード」とスコープ属性はいずれも参照されなくなります。クライアントごとに準拠レベルを分けたい場合は、サービスの「FAPI モード」を設定しないでください。
</Warning>

### FAPI モードとスコープ属性の対応

| FAPI モード                           | スコープ属性のキー | スコープ属性の値              | 適用されるプロファイル                            |
| ---------------------------------- | --------- | --------------------- | -------------------------------------- |
| FAPI 1.0 ベースライン                    | `fapi`    | `r`                   | FAPI 1.0 Part 1 (read-only API)        |
| FAPI 1.0 アドバンス                     | `fapi`    | `rw`                  | FAPI 1.0 Part 2 (read-and-write API)   |
| FAPI 2.0 セキュリティプロファイル              | `fapi2`   | `sp`                  | FAPI 2.0 Security Profile              |
| FAPI 2.0 メッセージ署名 - 認可リクエスト         | `fapi2`   | `ms-authreq`          | FAPI 2.0 Message Signing Profile 5.3   |
| FAPI 2.0 メッセージ署名 - 認可レスポンス         | `fapi2`   | `ms-authres`          | FAPI 2.0 Message Signing Profile 5.4   |
| FAPI 2.0 メッセージ署名 - イントロスペクションレスポンス | `fapi2`   | `ms-introspectionres` | FAPI 2.0 Message Signing Profile 5.5   |
| FAPI 2.0 メッセージ署名 - リソースリクエスト       | `fapi2`   | `ms-rscreq`           | FAPI 2.0 Message Signing Profile 5.6.1 |
| FAPI 2.0 メッセージ署名 - リソースレスポンス       | `fapi2`   | `ms-rscres`           | FAPI 2.0 Message Signing Profile 5.6.2 |

<Note>
  `fapi2` の値 `baseline`、`advanced-jar`、`advanced-jarm` は旧来の値で、現在は非推奨です。新たに設定する場合は上表の値を使用してください。
</Note>

### スコープ属性が複数のプロファイルを指す場合

スコープの属性は、リクエストに含まれる (あるいは関連付けられる) **すべてのスコープから集めて**評価されます。そのため、異なるプロファイルの属性を持つスコープが 1 つのリクエストに同時に含まれることがあります。

この場合、Authlete は以下の順序で判定します。先に該当したグループが採用され、それ以降は評価されません。

| 順位 | グループ                  | 該当するスコープ属性                                                                                                                                                         |
| -- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 1  | FAPI 2.0 メッセージ署名      | `fapi2` = `ms-authreq` / `ms-authres` / `ms-introspectionres` / `ms-rscreq` / `ms-rscres`<br />（非推奨の `advanced-jar` は認可リクエスト署名、`advanced-jarm` は認可レスポンス署名として扱われます） |
| 2  | FAPI 2.0 セキュリティプロファイル | `fapi2` = `sp`（非推奨の `baseline` を含む）                                                                                                                                |
| 3  | FAPI 1.0 Advanced     | `fapi` = `rw`                                                                                                                                                      |
| 4  | FAPI 1.0 Baseline     | `fapi` = `r`                                                                                                                                                       |

**同時に適用されるのは 1 位のグループの中だけです。** FAPI 2.0 のメッセージ署名は、該当する属性を複数付与すれば複数が同時に適用されます。2 位から 4 位は、いずれか 1 つだけが採用されます。

たとえば、あるスコープが `fapi` = `rw` を、別のスコープが `fapi2` = `sp` を持つリクエストでは、FAPI 2.0 セキュリティプロファイルだけが適用され、FAPI 1.0 アドバンスの属性は無視されます。

<Warning>
  グループをまたいだ組み合わせはできません。FAPI 2.0 のメッセージ署名を指すスコープ属性が 1 つでも含まれていると、同じリクエストに `fapi2` = `sp` や `fapi` = `rw` があってもそれらは評価されません。
</Warning>

### FAPI に関する設定項目の場所

サービスの設定は、サービス設定の **エンドポイント > 詳細設定 > FAPI** タブにあります。「指定可能なサービスプロファイル (任意)」で FAPI プロファイルを有効にし、「FAPI モード」でこのサービスに適用するモードを選びます。「FAPI モード」で「FAPI 2.0 メッセージ署名」を選ぶと、「FAPI 2.0 メッセージ署名要件」で対象を選べるようになります。

<img src="https://mintcdn.com/authlete/mVgTeY6-AI6BMxXk/protocols-and-flows/compliance-profiles/how-to-use-fapi-service-fapi-modes-ja.png?fit=max&auto=format&n=mVgTeY6-AI6BMxXk&q=85&s=aa70b6aab7e92959b682b2f375e7899d" alt="サービス設定の「FAPI」タブ" width="2122" height="1434" data-path="protocols-and-flows/compliance-profiles/how-to-use-fapi-service-fapi-modes-ja.png" />

*サービス設定の「FAPI」タブ*

クライアントの設定は、クライアント設定の **エンドポイント > 詳細設定 > FAPI** タブにあります。「FAPI 1.0 モード」と「FAPI 2.0 モード」があります。

<img src="https://mintcdn.com/authlete/mVgTeY6-AI6BMxXk/protocols-and-flows/compliance-profiles/how-to-use-fapi-client-fapi-modes-ja.png?fit=max&auto=format&n=mVgTeY6-AI6BMxXk&q=85&s=ba8d688f915b3820f5cd68171e6b6947" alt="クライアント設定の「FAPI」タブ" width="2122" height="1272" data-path="protocols-and-flows/compliance-profiles/how-to-use-fapi-client-fapi-modes-ja.png" />

*クライアント設定の「FAPI」タブ*

スコープの属性は、サービス設定の **トークン & クレーム > 詳細設定 > スコープ** タブで設定します。

### FAPI モードの組み合わせ規則

複数の FAPI モードを同時に指定できるのは、FAPI 2.0 のメッセージ署名同士の場合だけです。以下の 3 つは、それぞれ単独でのみ指定できます。

* FAPI 1.0 Baseline
* FAPI 1.0 Advanced
* FAPI 2.0 セキュリティプロファイル

たとえば「FAPI 2.0 メッセージ署名 - 認可リクエスト」と「FAPI 2.0 メッセージ署名 - 認可レスポンス」は同時に指定でき、両方が有効になります。一方「FAPI 2.0 セキュリティプロファイル」と「FAPI 2.0 メッセージ署名 - 認可リクエスト」を同時に指定することはできません。

以降は **FAPI 1.0** の設定です。FAPI 1.0 の各プロファイル (ベースライン / アドバンス) について、サービス・クライアント・リクエストに必要な設定を解説します。FAPI 2.0 の設定は「各プロファイルの詳細」に挙げた各ページをご参照ください。

## サービスの設定

ここでは、各セキュリティープロファイルをサポートする場合のサービスの設定について解説します。

### FAPI 1.0 ベースラインをサポートする場合

以下のように設定してください。

| 設定対象項目               | 設定内容                                                                                                                                                                                                |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 指定可能なサービスプロファイル (任意) | 有効にする。                                                                                                                                                                                              |
| サポート可能なクライアント認証方式    | 以下のうち、少なくとも一つを選択。<br />- TLS\_CLIENT\_AUTH<br />- SELF\_SIGNED\_TLS\_CLIENT\_AUTH<br />- CLIENT\_SECRET\_JWT<br />- PRIVATE\_KEY\_JWT<br />ただし、FAPI に対応したクライアントが全て public クライアントである場合、上記要求事項は不要となる。 |
| サポートするスコープ           | `r` 属性値を持つスコープを少なくとも一つ作成。                                                                                                                                                                           |

### FAPI 1.0 アドバンスをサポートする場合

FAPI 1.0 アドバンスをサポートする場合、「FAPI 1.0 ベースラインをサポートする場合」の設定に加えて、以下の設定が必要となります。(ただし、一部の設定内容は上書きされます。)

| 設定対象項目                   | 設定内容                                                                                                                                                                     |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| サポート可能な認証コンテキストクラスリファレンス | 適切な値を設定。(例: urn:mace:incommon:iap:silver)                                                                                                                                |
| サポートするレスポンスタイプ           | 以下のうち、少なくとも一つを選択。<br />- CODE\_ID\_TOKEN<br />- CODE\_ID\_TOKEN\_TOKEN<br />ただし、FAPI に対応したクライアントが常に JARM (補足 2. を参照) を利用する場合、上記要求事項は不要となる。                               |
| サポート可能なクライアント認証方式        | 以下のうち、少なくとも一つを選択。<br />- TLS\_CLIENT\_AUTH<br />- SELF\_SIGNED\_TLS\_CLIENT\_AUTH<br />- PRIVATE\_KEY\_JWT<br />ただし、FAPI に対応したクライアントが全て public クライアントである場合、上記要求事項は不要となる。 |
| 相互 TLS クライアント証明書バインディング  | 有効にする。                                                                                                                                                                   |
| サポートするスコープ               | `rw` 属性値を持つスコープを少なくとも一つ作成。                                                                                                                                               |

## クライアントの設定

ここでは、各セキュリティープロファイルをサポートする場合のクライアントの設定について解説します。

### FAPI 1.0 ベースラインをサポートする場合

以下のように設定してください。

| 設定対象項目             | 設定内容                                                                                                                                                              |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| クライアント認証方式         | このクライアントが confidential クライアントの場合は、以下のいずれかを選択。<br />- TLS\_CLIENT\_AUTH<br />- SELF\_SIGNED\_TLS\_CLIENT\_AUTH<br />- CLIENT\_SECRET\_JWT<br />- PRIVATE\_KEY\_JWT |
| リダイレクト URI         | https で始まる URI を設定。                                                                                                                                               |
| JWK セットの内容         | (「JWK セットエンドポイント URI」を利用する場合、本設定は不要。) このクライアントがクライアント認証方式に PRIVATE\_KEY\_JWT を利用する場合、アサーションの署名検証用の公開鍵を含め、かつその鍵が補足 3. の要求事項を満たすこと。                                 |
| JWK セットエンドポイント URI | (「JWK セットの内容」を利用する場合、本設定は不要。) このクライアントがクライアント認証方式に PRIVATE\_KEY\_JWT を利用する場合、この URI が指す JWK セットにアサーションの署名検証用の公開鍵を含め、かつその鍵が補足 3. の要求事項を満たすこと。                      |

### FAPI 1.0 アドバンスをサポートする場合

FAPI 1.0 アドバンスをサポートする場合、「FAPI 1.0 ベースラインをサポートする場合」の設定に加えて、以下の設定が必要となります。(ただし、一部の設定内容は上書きされます。)

| 設定対象項目               | 設定内容                                                                                                                                  |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| サポート可能なレスポンスタイプ      | 以下のうち、少なくとも一つを選択。<br />- CODE\_ID\_TOKEN<br />- CODE\_ID\_TOKEN\_TOKEN<br />ただし、このクライアントが常に JARM を利用する場合、上記要求事項は不要となる。                |
| クライアント認証方式           | このクライアントが confidential クライアントの場合、以下のいずれかを選択。<br />- TLS\_CLIENT\_AUTH<br />- SELF\_SIGNED\_TLS\_CLIENT\_AUTH<br />- PRIVATE\_KEY\_JWT |
| TLS クライアント証明書バインディング | 有効にする。                                                                                                                                |
| 認可レスポンスの署名アルゴリズム     | このクライアントが JARM を利用する場合、以下のいずれかを選択する。<br />- PS256<br />- ES256                                                                        |
| アサーション署名アルゴリズム       | クライアント認証方式で PRIVATE\_KEY\_JWT を選択している場合、以下のいずれかを選択する。<br />- PS256<br />- ES256                                                       |
| リクエストオブジェクトの署名アルゴリズム | 以下のいずれかを選択する。<br />- PS256<br />- ES256                                                                                               |
| ID トークンの署名アルゴリズム     | このクライアントが認可サーバーに対して ID トークンを要求する場合、以下のいずれかを選択する。<br />- PS256<br />- ES256                                                            |
| ユーザー情報の署名アルゴリズム      | このクライアントがユーザー情報エンドポイントを利用する場合、以下のいずれかを選択する。<br />- PS256<br />- ES256                                                                 |

## リクエスト

ここでは、各セキュリティープロファイルにおける、各エンドポイント (認可エンドポイント・トークンエンドポイント) に対するリクエストについて解説します。

## 認可エンドポイントに対するリクエスト

### FAPI 1.0 ベースラインにおけるリクエスト

**各リクエストパラメーターに対する要求事項**

| 対象のパラメーター               | 要求事項                                                                               |
| ----------------------- | ---------------------------------------------------------------------------------- |
| redirect\_uri           | 以下の要求事項を満たすリダイレクト URI を指定すること。<br />- サービスに事前登録された値と完全合致すること。<br />- https で始まること。 |
| state                   | scope パラメーターに openid スコープが含まれない場合のみ、必須となる。                                         |
| code\_challenge         | PKCE ([RFC 7636](https://tools.ietf.org/html/rfc7636)) に準拠する値を指定すること。              |
| code\_challenge\_method | S256 を指定すること。                                                                      |
| scope                   | `r` 属性値を持つスコープを少なくとも一つ指定すること。                                                      |

**リクエストの例**

```
#
# public クライアントからの認可リクエストの例。
#
# (注意)
#   * scope: accounts スコープは `r` 属性値を持つものとする。
#   * state: 必須ではないが OAuth 2.0 の仕様により推奨される。
#   * nonce: OpenID Connect の仕様により response_type に
#      id_token を含む場合は必須。
#
GET /api/authorization?

response_type=code+id_token&
client_id=285946231596&
redirect_uri=https://my-client.com/callback&
scope=openid+accounts&
code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM&
code_challenge_method=S256&
state=mystate&
nonce=mynonce
```

### FAPI 1.0 アドバンスにおけるリクエスト

**各リクエストパラメーターに対する要求事項**

FAPI 1.0 アドバンスのリクエストを行う場合、「FAPI 1.0 ベースラインにおけるリクエスト」における要求事項に加えて、以下の要求事項を満たす必要があります。(ただし、一部の要求事項は上書きされます。)

| 対象のパラメーター               | 要求事項                                                                                       |
| ----------------------- | ------------------------------------------------------------------------------------------ |
| request                 | (request\_uri パラメーターを利用する場合、本要求事項は不要となる。) 補足 4. の要求事項を満たすリクエストオブジェクトを指定すること。               |
| request\_uri            | (request パラメーターを利用する場合、本要求事項は不要となる。) 補足 4. の要求事項を満たすリクエストオブジェクトを参照する URL を指定すること。          |
| response\_type          | code id\_token または code id\_token token を指定すること。ただし、このクライアントが常に JARM を利用する場合、上記要求事項は不要となる。 |
| code\_challenge         | public クライアントの場合のみ必須。PKCE (RFC 7636) に準拠する値を指定すること。                                        |
| code\_challenge\_method | public クライアントの場合のみ必須。S256 を指定すること。                                                         |
| scope                   | `rw` 属性値を持つスコープを少なくとも一つ指定すること。                                                             |
| claims                  | acr クレームを必須クレーム (`"essential": true`) として含めること。                                            |

`claims` パラメーターの例を以下に示します。

```json theme={null}
{
  "id_token": {
    "acr": {
      "essential": true,
      "values": ["urn:mace:incommon:iap:silver"]
    }
  }
}
```

**リクエストの例**

```
#
# confidential クライアントからの認可リクエストの例。
#
# (注意)
#   * scope: payments スコープは `rw` 属性値を持つものとする。
#   * state: 必須ではないが OAuth 2.0 の仕様により推奨される。
#   * nonce: OpenID Connect の仕様により、response_type に
#      id_token を含む場合は必須。
#
GET /api/authorization?

response_type=code+id_token&
client_id=291985138172&
scope=openid+payments&
redirect_uri=https://my-client.com/callback&
state=mystate&
nonce=mynonce&
claims=[REQUEST_OBJECT_PAYLOAD]&
request=eyJh...[省略]...nPQ
```

## トークンエンドポイントに対するリクエスト

### FAPI 1.0 ベースラインにおけるリクエスト

**各リクエストパラメーターに対する要求事項**

| 対象のパラメーター         | 要求事項                                                                                             |
| ----------------- | ------------------------------------------------------------------------------------------------ |
| client\_assertion | クライアント認証方式で PRIVATE\_KEY\_JWT を選択している場合、本パラメーターに指定されるアサーションを生成する際には、補足 3. の要求事項を満たす鍵を用いて署名を行うこと。 |

**リクエストの例**

```
#
# public クライアントからのトークンリクエストの例。
#
POST /api/token

client_id=285946231596&
grant_type=authorization_code&
code=_vaXlQ_ItUX4hiWzXgOT-Jp9-oVPKGQ6Q6QZu_P2GXw&
redirect_uri=https://my-client.com/callback&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
```

### FAPI 1.0 アドバンスにおけるリクエスト

**各リクエストパラメーターに対する要求事項**

FAPI 1.0 アドバンスにおいてリクエストを行う場合、「FAPI 1.0 ベースラインにおけるリクエスト」での要求事項に加えて、以下の要求事項を満たす必要があります。

| 対象のパラメーター         | 要求事項                                                                                                     |
| ----------------- | -------------------------------------------------------------------------------------------------------- |
| client\_assertion | クライアント認証方式で PRIVATE\_KEY\_JWT を選択している場合、本パラメーターに指定するアサーションに署名を付与する際には、「アサーション署名アルゴリズム」で指定したアルゴリズムを用いること。 |

**クライアント証明書**

「TLS クライアント証明書バインディング」が有効となっているため、リクエストを行う際には、クライアントはトークンエンドポイントに対してクライアント証明書を提示する必要があります。

**リクエストの例**

```
#
# confidential クライアントからのトークンリクエストの例。
#
# (注意)
#   * クライアント認証方式は PRIVATE_KEY_JWT を選択している想定。
#   * 以下では例示されていないが、「TLS クライアント証明書バイン
#      ディング」が有効化されているため、クライアントはトークンエ
#      ンドポイントに対してクライアント証明書を提示する必要がある。
#
POST /api/token

client_id=291985138172&
grant_type=authorization_code&
code=YG-gD9v-vmnuKaHkRHcvWq1UxlxT_9vgj28ffxIAX40&
redirect_uri=https://my-client.com/callback&
client_assertion=eyJh...[省略]...OWg&
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
```

## 補足

### 1. スコープの属性

スコープの属性については、[こちらの記事](/ja/configuration-reference/tokens-and-claims/scope-attributes)を参照してください。

### 2. JARM

JARM については、[こちらの記事](/ja/configuration-reference/endpoints/enabling-jarm)を参照してください。

### 3. キーのサイズに対する要求事項

FAPI 1.0 Part 1 には、以下の要求事項があげられています。

> Financial Services – Financial API - Part 1, 5.2.2. Authorization Server
>
> The authorization server,
> ...
> 5\. shall require a key of size 2048 bits or larger if RSA
> algorithms are used for the client authentication;
> 6\. shall require a key of size 160 bits or larger if elliptic
> curve algorithms are used for the client authentication;

これより、クライアント認証方式で PRIVATE\_KEY\_JWT を選択している場合、クライアントがアサーション (JWS) の署名に用いる秘密鍵とその検証用に用いる公開鍵は以下の要求事項を満たす必要があります。

| アサーション署名アルゴリズム        | アサーションの署名・検証に用いる鍵に対する要求事項 |
| --------------------- | ------------------------- |
| RSA 系のアルゴリズムを選択している場合 | 鍵のサイズが 2048 ビット以上であること。   |
| EC 系のアルゴリズムを選択している場合  | 鍵のサイズが 160 ビット以上であること。    |
| それ以外の場合               | 要求事項はない。                  |

### 4. リクエストオブジェクトに対する要求事項

FAPI 1.0 Part 2 では、リクエストオブジェクトに対して以下の要求事項が課せられます。

> Financial Services – Financial API - Part 2, 5.2.2. Authorization Server
>
> The authorization server,
> ...
>
> 1. shall require the request or request\_uri parameter to be passed as a JWS signed JWT as in clause 6 of \[OIDC];
>    ...
> 2. shall require that all parameters are present inside the signed request object passed in the request or request\_uri parameter;
>    ...
> 3. shall require the request object to contain an exp claim;
>    ...
> 4. shall require the aud claim in the request object to be, or to be an array containing, the OP's Issuer Identifier URL;

更に、署名についても以下の要求事項が課せられます。

> Financial Services – Financial API - Part 2, 8.6 JWS algorithm considerations
>
> Both clients and authorization servers:
>
> 1. shall use PS256 or ES256 algorithms;
> 2. should not use algorithms that use RSASSA-PKCS1-v1\_5 (e.g. RS256);
> 3. shall not use none;

これらをまとめると、FAPI 1.0 アドバンスをサポートする場合、リクエストオブジェクトに対して以下の要求事項が課せられることになります。

* クライアントの「リクエストオブジェクトの署名アルゴリズム」で指定されるアルゴリズム (PS256 または ES256) を用いて署名されていること。
* 全てのリクエストパラメーターを含むこと。
* exp クレームを含むこと。
* aud クレームを含み、その値としてサービスの「発行者識別子」の値が指定されていること。

以下は、上記要求事項を満たすリクエストオブジェクトのペイロードの例になります。

```json theme={null}
{
  "response_type": "code id_token",
  "exp": 1554973000,
  "aud": "https://my-authz-server.com/",
  "client_id": "291985138172",
  "scope": "openid payments",
  "redirect_uri": "https://my-client.com/callback",
  "state": "mystate",
  "nonce": "mynonce",
  "claims": {
    "id_token": {
      "acr": {
        "values": ["urn:mace:incommon:iap:silver"],
        "essential": true
      }
    }
  }
}
```
