FAPI モードにおける追加検証項目
概要
バージョン 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) と Advanced (Financial-grade API - Part 2: Read and Write API Security Profile) に分かれており、どちらに従うかによって Authlete の振る舞いも異なります。
ここでは、標準の OAuth 2.0 および OpenID Connect 用の検証項目に加えて、FAPI 1.0 Baseline/Advanced において追加実行される検証項目について説明します。
 認可エンドポイント
1. response_type リクエストパラメーター
 | 
 | 
| Baseline | 
チェック無し | 
| Advanced | 
 JARM が使われていない限り、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
(OAuth 2.0 for Native Apps)の『7.2. Claimed “https” Scheme URI Redirection
』で言及されている手法を使う必要がある。
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 でなければならない。 | 
参考情報