FAPI モードにおける追加検証項目

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 でなければならない。

参考情報