概要
バージョン 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 リクエストパラメーター
「JARM を使う」=「response_mode リクエストパラメーターを明示的に指定し、その値として、query.jwt、fragment.jwt、form_post.jwt、jwt のいずれかを使う」
2. redirect_uri リクエストパラメーター
scope リクエストパラメーターに openid が含まれる場合、FAPI に関係なく、OIDC Core の規定により redirect_uri リクエストパラメーターは必須となる。
3. リダイレクト URI のスキーム
FAPI ではリダイレクト URI にカスタムスキームを使えない。そのため、外部 Web サーバーを立てずにクライアント側だけでリダイレクト処理を完結させたい場合、BCP 212 (OAuth 2.0 for Native Apps)の『7.2. Claimed “https” Scheme URI Redirection 』で言及されている手法を使う必要がある。
4. リダイレクト URI の検証
scope リクエストパラメーターに openid が含まれる場合、FAPI に関係なく、OIDC Core の規定により、リダイレクト URI の検証は完全一致で行われる。
5. state リクエストパラメーター
6. nonce リクエストパラメーター
「認証されたユーザーの識別子が要求されている場合(原文=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. リクエストオブジェクト
8. リクエストオブジェクトの署名
9. リクエストオブジェクト外のリクエストパラメーター群
10. リクエストオブジェクト内の exp クレーム
11. リクエストオブジェクト内の aud クレーム
12. リクエストオブジェクトの署名アルゴリズム
13. code_challenge リクエストパラメーター
14. code_challenge_method リクエストパラメーター
code_challenge_method リクエストパラメーターを省略すると、仕様により、デフォルト値として plain が使われる。そのため、明示的に code_challenge_method=S256 を認可リクエストに含めなければならない。
15. ACR を essential として要求
「ACR を essential として要求する」=「claims リクエストパラメーターを明示的に指定し、その値の JSON 内の適切な場所に『“essential”:true』を含める」
OPEN_BANKING が有効になっている場合、この検証はおこなわれない。
16. レスポンス JWT の署名アルゴリズム
JARM を使うと、認可レスポンスが JWT 形式になる。
17. ID トークンの署名アルゴリズム
トークンエンドポイント
18. クライアント認証方式
- 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. クライアントアサーションの署名アルゴリズム
クライアント認証方式に client_secret_jwt もしくは private_key_jwt を設定することにより、client_assertion=JWT というリクエストパラメーターでクライアント認証をおこなうことになる。「クライアントアサーション」とは、そのリクエストパラメーターに指定される JWT をさす。