> ## 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 1.0 の設定

> FAPI 1.0 ベースライン・アドバンスの各プロファイルに必要なサービスとクライアントの設定、およびリクエスト要件の参照先を解説します。

## 概要

本ページでは、FAPI 1.0 の各プロファイル — **ベースライン** ([Part 1](https://openid.net/specs/openid-financial-api-part-1-1_0-final.html)) と **アドバンス** ([Part 2](https://openid.net/specs/openid-financial-api-part-2-1_0.html)) — に必要なサービスとクライアントの設定を解説します。

これらを設定するだけでは不十分で、どのプロファイルをリクエストに適用するかを Authlete に伝える必要があります。その方法は [FAPI の機能を利用する](/ja/protocols-and-flows/compliance-profiles/how-to-use-fapi) を、構築手順を一通りたどる場合は [Financial-grade API (FAPI) 1.0 Basics](/ja/protocols-and-flows/compliance-profiles/fapi-basics) をご覧ください。

## サービスの設定

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

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

## リクエストの要件

サービスとクライアントを設定すると、Authlete は適用されるプロファイルに従って各リクエストを検証します。認可リクエスト・トークンリクエスト・リクエストオブジェクトが満たすべき要件は、ベースラインとアドバンスに分けて [FAPI モードにおける追加検証項目](/ja/protocols-and-flows/compliance-profiles/validation-in-fapi-mode) に 23 項目としてまとめられています。主なものは以下のとおりです。

| 項目                                                               | 番号    |
| ---------------------------------------------------------------- | ----- |
| リクエストオブジェクトの有無・署名・含めるべきリクエストパラメーター・`exp` および `aud` クレーム・署名アルゴリズム | 7〜12  |
| `code_challenge` と `code_challenge_method` (PKCE)                | 13、14 |
| `acr` を essential として要求                                          | 15    |
| クライアント認証方式とクライアントアサーションの署名アルゴリズム                                 | 18、19 |
| クライアントアサーションの鍵サイズ (RSA は 2048 ビット、EC は 160 ビット)                  | 20    |
| 送信者制限アクセストークンの方式                                                 | 22    |

## リクエストの例

上記の要求事項が「何を満たすべきか」であるのに対し、ここではクライアントが認可サーバーに対して実際に送るリクエストの形を示します。

### 認可リクエスト (ベースライン)

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

### 認可リクエスト (アドバンス)

`claims` パラメーターには `acr` を必須クレームとして含める必要があります。

```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
```

上記の `request` パラメーターは署名付きリクエストオブジェクトです。そのペイロードには、全てのリクエストパラメーター、`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
      }
    }
  }
}
```

### トークンリクエスト (ベースライン)

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

### トークンリクエスト (アドバンス)

クライアントには「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
```

## 関連する設定

| 項目     | 参照先                                                                      |
| ------ | ------------------------------------------------------------------------ |
| スコープ属性 | [スコープ属性](/ja/configuration-reference/tokens-and-claims/scope-attributes) |
| JARM   | [JARM を有効にする](/ja/configuration-reference/endpoints/enabling-jarm)       |
