> ## 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はFinancial-grade API Security Profile 1.0（FAPI 1.0）をサポートし、OAuth 2.0およびOpenID Connect用の検証項目に加えて、FAPI 1.0 Baseline/Advancedにおいて追加実行される検証項目について説明しています。

## 概要

バージョン 2.0 以降、Authlete は Financial-grade API Security Profile 1.0 (FAPI 1.0) をサポートしています。FAPI 1.0 は Baseline ([Financial-grade API - Part 1: Read Only API Security Profile](http://openid.net/specs/openid-financial-api-part-1-ID2.html)) と Advanced ([Financial-grade API - Part 2: Read and Write API Security Profile](http://openid.net/specs/openid-financial-api-part-2-ID2.html)) に分かれており、どちらに従うかによって Authlete の振る舞いも異なります。
ここでは、標準の OAuth 2.0 および OpenID Connect 用の検証項目に加えて、FAPI 1.0 Baseline/Advanced において追加実行される検証項目について説明します。

##  認可エンドポイント

### 1. response\_type リクエストパラメーター

|          |                                                                                                                                                                            |
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                                                                                                                     |
| Advanced |  [JARM](https://openid.net/specs/openid-financial-api-jarm-ID1.html) が使われていない限り、response\_type リクエストパラメーターの値は "code id\_token" もしくは "code id\_token token" のいずれかでなければならない。 |

> 「JARM を使う」＝「response\_mode リクエストパラメーターを明示的に指定し、その値として、query.jwt、fragment.jwt、form\_post.jwt、jwt のいずれかを使う」

### 2. redirect\_uri リクエストパラメーター

|          |                             |
| -------- | --------------------------- |
| Baseline | redirect\_uri リクエストパラメーター必須 |
| Advanced | 同上                          |

> scope リクエストパラメーターに openid が含まれる場合、FAPI に関係なく、OIDC Core の規定により redirect\_uri リクエストパラメーターは必須となる。

### 3. リダイレクト URI のスキーム

|          |                                    |
| -------- | ---------------------------------- |
| Baseline | リダイレクト URI のスキームは https でなければならない。 |
| Advanced | 同上                                 |

> FAPI ではリダイレクト URI にカスタムスキームを使えない。そのため、外部 Web サーバーを立てずにクライアント側だけでリダイレクト処理を完結させたい場合、[BCP 212](https://tools.ietf.org/html/bcp212)
> （OAuth 2.0 for Native Apps）の『[7.2. Claimed "https" Scheme URI Redirection](https://tools.ietf.org/html/bcp212#section-7.2)
> 』で言及されている手法を使う必要がある。

### 4. リダイレクト URI の検証

|          |                                        |
| -------- | -------------------------------------- |
| Baseline | 登録済みのリダイレクト URI に完全一致しなければならい。部分一致は不可。 |
| Advanced | 同上                                     |

> scope リクエストパラメーターに openid が含まれる場合、FAPI に関係なく、OIDC Core の規定により、リダイレクト URI の検証は完全一致で行われる。

### 5. state リクエストパラメーター

|          |                                                           |
| -------- | --------------------------------------------------------- |
| Baseline | scope リクエストパラメーターに openid が含まれていなければ、state リクエストパラメーター必須。 |
| Advanced | 同上                                                        |

### 6. nonce リクエストパラメーター

|          |                                              |
| -------- | -------------------------------------------- |
| Baseline | 認証されたユーザーの識別子が要求されている場合、nonce リクエストパラメーター必須。 |
| Advanced | 同上                                           |

> 「認証されたユーザーの識別子が要求されている場合（原文＝if it is desired to obtain a persistent identifier of the authenticated user）」を、Authlete では「ID トークンが要求されている場合」と解釈し、「response\_type リクエストパラメーターに id\_token が含まれている、もしくは、response\_type リクエストパラメーターに code が含まれており、かつ、scope リクエストパラメーターに openid が含まれている場合」、という条件として扱う。

### 7. リクエストオブジェクト

|          |                                                                                          |
| -------- | ---------------------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                                   |
| Advanced | 認可リクエストでリクエストオブジェクトを用いなければならない。すなわち、request リクエストパラメーターもしくは request\_uri リクエストパラメーターが必須。 |

### 8. リクエストオブジェクトの署名

|          |                             |
| -------- | --------------------------- |
| Baseline | チェック無し                      |
| Advanced | リクエストオブジェクトは署名されていなければならない。 |

### 9. リクエストオブジェクト外のリクエストパラメーター群

|          |                                                                  |
| -------- | ---------------------------------------------------------------- |
| Baseline | チェック無し                                                           |
| Advanced | リクエストオブジェクト外にあるリクエストパラメーター群は、全てリクエストオブジェクトの中にも重複して入れておかなければならない。 |

### 10. リクエストオブジェクト内の exp クレーム

|          |                                      |
| -------- | ------------------------------------ |
| Baseline | チェック無し                               |
| Advanced | リクエストオブジェクトに exp クレームが含まれていなければならない。 |

### 11. リクエストオブジェクト内の aud クレーム

|          |                                                                                        |
| -------- | -------------------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                                 |
| Advanced | リクエストオブジェクトに aud クレームが含まれていなければならない。その値は、OpenID プロバイダーの識別子と一致、もしくは当該識別子を含む配列でなければならない。 |

### 12. リクエストオブジェクトの署名アルゴリズム

|          |                  |
| -------- | ---------------- |
| Baseline | チェック無し           |
| Advanced | PS256 もしくは ES256 |

### 13. code\_challenge リクエストパラメーター

|          |                                                      |
| -------- | ---------------------------------------------------- |
| Baseline | code\_challenge リクエストパラメーター必須。                       |
| Advanced | クライアントタイプが public の場合、code\_challenge リクエストパラメーター必須。 |

### 14. code\_challenge\_method リクエストパラメーター

|          |                                                                                       |
| -------- | ------------------------------------------------------------------------------------- |
| Baseline | code\_challenge\_method リクエストパラメーターの値は S256 でなければならない。plain 不可。                       |
| Advanced | クライアントタイプが public の場合、code\_challenge\_method リクエストパラメーターの値は S256 でなければならない。plain 不可。 |

> code\_challenge\_method リクエストパラメーターを省略すると、仕様により、デフォルト値として plain が使われる。そのため、明示的に code\_challenge\_method=S256 を認可リクエストに含めなければならない。

### 15. ACR を essential として要求

|          |                                 |
| -------- | ------------------------------- |
| Baseline | チェック無し                          |
| Advanced | ACR を essential として要求しなければならない。 |

> 「ACR を essential として要求する」＝「claims リクエストパラメーターを明示的に指定し、その値の JSON 内の適切な場所に『"essential":true』を含める」

> OPEN\_BANKING が有効になっている場合、この検証はおこなわれない。

### 16. レスポンス JWT の署名アルゴリズム

|          |                                                                               |
| -------- | ----------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                        |
| Advanced | PS256 または ES256。クライアントのメタデータ authorization\_signed\_response\_alg の値をどちらかにする。 |

> JARM を使うと、認可レスポンスが JWT 形式になる。

### 17. ID トークンの署名アルゴリズム

|          |                                                                           |
| -------- | ------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                    |
| Advanced | PS256 または ES256。クライアントのメタデータ id\_token\_signed\_response\_alg の値をどちらかにする。 |

## トークンエンドポイント

### 18. クライアント認証方式

|          |        |
| -------- | ------ |
| Baseline | 次のいずれか |

* tls\_client\_auth
* self\_signed\_tls\_client\_auth
* client\_secret\_jwt
* private\_key\_jwt
  |
  \| Advanced | 次のいずれか
* tls\_client\_auth
* self\_signed\_tls\_client\_auth
* private\_key\_jwt
  |

> クライアントのメタデータ token\_endpoint\_auth\_method の値を適切に設定する。

### 19. クライアントアサーションの署名アルゴリズム

|          |                 |
| -------- | --------------- |
| Baseline | チェック無し          |
| Advanced | PS256 または ES256 |

> クライアント認証方式に client\_secret\_jwt もしくは private\_key\_jwt を設定することにより、client\_assertion=JWT というリクエストパラメーターでクライアント認証をおこなうことになる。「クライアントアサーション」とは、そのリクエストパラメーターに指定される JWT をさす。

### 20. クライアントアサーションの鍵サイズ

|          |                                                             |
| -------- | ----------------------------------------------------------- |
| Baseline | 鍵のサイズは、アルゴリズムが RSA 系であれば 2048 ビット以上、楕円曲線系であれば 160 ビット以上が必須。 |
| Advanced | 同上                                                          |

### 21. ID トークンの署名アルゴリズム

|          |                                                                           |
| -------- | ------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                    |
| Advanced | PS256 または ES256。クライアントのメタデータ id\_token\_signed\_response\_alg の値をどちらかにする。 |

### 22. Mechanism for sender-constraining access tokens

|          |                                                                                             |
| -------- | ------------------------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                                      |
| Advanced | MTLS (Certificate Binding) を mechanism for sender-constraining access tokens として用いなければならない。 |

## ユーザー情報エンドポイント

### 23. ユーザー情報レスポンスの署名アルゴリズム

|          |                                                                                                                     |
| -------- | ------------------------------------------------------------------------------------------------------------------- |
| Baseline | チェック無し                                                                                                              |
| Advanced | ユーザー情報レスポンスに署名が行われる場合（クライアントのメタデータ userinfo\_signed\_response\_alg が未設定ではない場合）、そのアルゴリズムは PS256 または ES256 でなければならない。 |

## 参考情報

* [世界最先端の API セキュリティー技術、実装者による『FAPI（Financial-grade API）』解説](https://qiita.com/TakahikoKawasaki/items/83c47c9830097dba2744)
