「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- 金融データへの読み取り専用アクセスに適したOAuthプロファイル
- OpenID Connect(OIDC)を使用して顧客(ユーザ)を識別
- トークンを使用して、エンドポイントから保護データを読取
- エンドポイントは、JSONデータを提供するREST API
※ ドラフト 4 を参考にして作成。その後、ドラフト 6 を再度完読して加筆・修正。
要約 †
フロー †
このプロファイルを簡単に説明すると、クライアントごと、以下のようになる。
Confidentialクライアント †
Publicクライアント †
OAuth PKCE を使用する。
- 「ハッシュ関数」には、「S256」を使用する。
- 「アプリケーション間通信」には「Claimed Https Scheme URI Redirection」を使用する。
要件 †
通信 †
- SSL/TLS(TLS 1.2以降)
- redirect_uri(完全一致)
認証 †
- ユーザ
LoA 2
- パスワードは1024以上の組み合わせがあること。
- IDは公的な証明書を確認して作成する。
- クライアント
追加のクライアント認証の実装が必要(以下の何れかが必要)。
トークン種類 †
Bearer Token(持参人切符)
役割 †
Authorization Server †
認証・認可 †
- LoA 2
- 認可画面が必要(ここで scope の一覧を表示する)。
クライアント認証 †
- クライアント認証で
- 共通鍵を使用する場合、
client_secretを使う場合、 UTF-8 オクテットは128ビット以上が必要。
- 公開鍵を使用する場合、
RSAの場合、2048ビット以上、Elliptic Curveの場合、160ビット以上。
redirect_uri †
- 事前登録が必要
- 認可リクエストに必須
- 完全一致が必要
- httpsのURIスキーマであること。
codeとtoken †
- code
未使用であること。
≒一度だけ有効にする。
- token
- scopeのリストを含む
- 有効時間は一度の利用に十分な、若しくは、非常に短い期間に限定
- 最小128ビットの推測不可能な値(構造化アクセストークンを妨げるものではない)
追加の機能 †
Client †
Confidentialクライアント †
- 暗号要件
- RSA暗号を使用する場合、最小2048ビットのRSA鍵。
- Elliptic Curve暗号を使用する場合、最小160ビットの楕円曲線キー
- 対称鍵暗号を使用する場合、クライアントの秘密鍵が128ビット以上
Publicクライアント †
HTTP †
- その他、以下のオプションを追加できる。
- x-fapi-auth-dateヘッダ
Resource Ownerが最後にログインした時刻を指定
- x-fapi-customer-ip-addressヘッダ
Resource OwnerのIPアドレスを提供する。
Resource Server †
HTTP †
- HTTP GETメソッドの使用をサポート
- Client ≠ Resource Serverの場合、
必要に応じてCORSなどをサポート
- Content-Typeヘッダ
Content-Type: application/json; charset=UTF-8
- x-fapi-interaction-idヘッダ
- issか、金融機関のルーティング番号
- Requestにある場合、Responseにも設定。
- Requestにない場合、GUIDを生成して設定。
- このid値は、ログに出力する。
Accessトークン †
セキュリティに関する考慮事項 †
- ISO / IEC 29100のプライバシー原則に従う。
考察 †
プロファイル †
プロファイルの識別 †
Dynamic Client Registrationのメタデータを使用するのでは?と。
- 公式には以下の様に識別するらしい。
- AuthZ : ClientのMetadata登録で伝える、
- Client : Client自身は自身のProfileを解っている。
- テスト用には、取り敢えず、
- AuthZ : client_idを足し、fapi1、fapi2的なオレオレ的なMetadataを追加して対応する。
- Client : stateに、fapi1、fapi2的なプレフィックスを付与して対応する。
他のプロファイルの抑止 †
他のプロファイルで同じトークンが発行されるので、
OAuth2 / OIDC標準のFlowは拒否しないといけない?
- プロファイルで定義された以外のトークン発行を抑止する。
- fapi1
- Confidential : code
- Public : PKCE
- fapi2
- Confidential : code
- Public : Hybrid?
参考 †
関連仕様 †
ただしOAuth2 / OIDCを除く。
Tags: :IT国際標準, :認証基盤, :クレームベース認証, :OAuth