「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Financial API (FAPI)]]
* 目次 [#zce5c6fe]
#contents

*概要 [#mec56743]
-[[Financial API (FAPI)]]の「Read and Write API用セキュリティ・プロファイル」
-金融データへのトランザクション・アクセスに適した[[OAuth]]プロファイル

※ この項は、ドラフト 4 を参考にして作成。

*要約 [#sab53ee8]
-送信者・受信者・メッセージ認証を強化
-以下の攻撃に対するコントロールを規定
--認可要求の改ざん
--コードインジェクション
--状態インジェクション
--トークン要求フィッシング
--認可応答の改ざん

**フロー [#y974f9a7]

***response_type [#s32102a0]
[[OpenID Connect]]の[[Hybrid Flow>OpenID Connect#l565139a]]

-code id_token
-code id_token token

***[[IDトークン>OpenID Connect#ofb73c59]] [#g7df69b2]
-JWT形式
--JWS署名(必須)
---PS256
---ES256
--JWE暗号化(すべき)

-分離トークン
--認可応答が改ざんされていないことを検証。
--クライアントは、s_hash値を検証する。

-[[クレーム追加>OpenID Connect#c007540d]]
--at_hash
--c_hash
--更に、
---[[arcとamr>OpenID Connect#l52144f8]]
---[[s_hash>#k722ecb6]]

***s_hash [#k722ecb6]
state の ハッシュ値。

-値
--state 値のASCII表現のオクテットのハッシュの左端の半分をbase64urlエンコーディング
--ハッシュはIDトークンのJOSEヘッダのalgパラメタで使用されるアルゴリズム。

-例:algがHS512の場合
--state値をASCIIエンコードし、
--SHA-512でハッシュ化し、
--左端の256ビットを切り出し、
--base64urlエンコードする。

***request or request_uri [#h3bfbf17]
-パラメタを要求。
-[[Requestオブジェクト>JWT Secured Authorization Request (JAR)]](必須)

**通信 [#ob9374f1]
-SSL/TLS
--TLSバージョン1.2以降
--TLSサーバ証明書チェック
--暗号スイート
---TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
---TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
---TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
---TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

-redirect_uri(完全一致)

**認証 [#k8da384f]
-[[LoA 3>#h48691d5]]
--特定される⾝元識別情報の信⽤度が「相当程度ある」。
--パスワードだけではなく、2要素以上を用いてユーザー認証をする。

-クライアント認証の類
--[[Requestオブジェクト>JWT Secured Authorization Request (JAR)]](必須)
--クライアント認証と[[記名式トークン>#x210d002]]
---[[OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens]](MTLS)
---[[OAuth 2.0 Token Binding]](OAUTB)

**トークン種類 [#x210d002]
[[記名式トークン(Proof-of-possession Token)>トークン#b38de47f]]

-対象
--code
--token
---access_token
---refresh_token

-紐付けのために以下をサポートする必要がある。
--[[OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens]]
--[[OAuth 2.0 Token Binding]]

*役割 [#a2170501]

**Authorization Server [#zf702573]

***認証・認可 [#u62c1062]
-[[LoA 3>#k8da384f]]

***クライアント認証 [#tf6a9f9c]
-[[OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens]]
-[[OAuth 2.0 Token Binding]]

***redirect_uri [#fabee59b]
-事前登録が必要
-認可リクエストに必須
-完全一致が必要

***code, token [#mbd264d4]
-[[記名式トークン>#x210d002]]
--code
--token
---access_token
---refresh_token

-[[IDトークン>#g7df69b2]]

***追加の機能 [#k8b3bfec]
-[[Requestオブジェクト>JWT Secured Authorization Request (JAR)]](必須)~
--
FAPIでは、[[Clientではなく、Authorization Serverがrequest_uriをホストする。>JWT Secured Authorization Request (JAR)#s5ba22a4]]
---Clientが指定したrequest_uriへの要求をサポートする必要が無い。
---[[Requestオブジェクト>JWT Secured Authorization Request (JAR)]]の機密性のためにURIのエントロピーに依存しない。

--[[Request>JWT Secured Authorization Request (JAR)#od26debf]]
 POST https://as.example.com/ros/ HTTP/1.1
 Host: as.example.com
 Content-Type: application/jws
 Content-Length: 1288
 
 eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ew0KICJpc3MiOiA
 (... abbreviated for brevity ...)
 zCYIb_NMXvtTIVc1jpspnTSD7xMbpL-2QgwUsAlMGzw

--Response(正常)~
上記のResponseのaudがclient_id、~
[[Request>JWT Secured Authorization Request (JAR)#od26debf]] の iss, aud = Response の aud, iss と反転。
 HTTP/1.1 201 Created
 Date: Tue, 2 May 2017 15:22:31 GMT
 Content-Type: application/json
 
 {
     'iss':'https://as.example.com/',
     'aud':'s6BhdRkqt3',
     'request_uri':'urn:example:MTAyODAK',
     'exp':1493738581
 }

--Response(異常)
---Authorization Required~
401 Unauthorized HTTP error~
署名検証が失敗した場合。

---Invalid Request~
400 Bad Request HTTP error~
[[Request>JWT Secured Authorization Request (JAR)#od26debf]]が無効

---Method Not Allowed~
405 Method Not Allowed HTTP error~
POST要求を使用しなかった場合

---Request Entity Too Large~
413 Request Entity Too Large HTTP error~
要求サイズが上限を超える場合。

---Too Many Requests~
429 Too Many Requests HTTP error~
ある期間にClientからの要求数が上限を超えた場合。

**Client [#ide28df2]

***Confidentialクライアント [#b1fc3c02]
-以下の何れかをサポートする。
--[[OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens]]
--[[OAuth 2.0 Token Binding]]
-JWSおよびJWEの両方の[[IDトークン>#g7df69b2]]を要求する。

***Publicクライアント [#e482f66f]
-[[OAuth 2.0 Token Binding]](必須)
-[[Requestオブジェクト>JWT Secured Authorization Request (JAR)]](必須)
-arcクレームでLoA 3以上での認証を要求し、[[arcとamr>OpenID Connect#l52144f8]]を検証する。

***HTTP [#z7825ead]
[[Part 1>FAPI Part 1 (Read Only API Security Profile)#pa51309c]]要件を遵守。

**Resource Server [#fbfccde7]

***HTTP [#r3364a91]
[[Part 1>FAPI Part 1 (Read Only API Security Profile)#p3a2a94b]]要件を遵守。

***Accessトークン [#b5d0fc4a]
[[記名式トークン>#x210d002]]の作成と使用。
-[[OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens]]
-[[OAuth 2.0 Token Binding]]

*セキュリティに関する考慮事項 [#mea47b47]
-[[記名式トークン>#x210d002]]
--[[OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens]]
--[[OAuth 2.0 Token Binding]]

-[[Requestオブジェクト>JWT Secured Authorization Request (JAR)]]
-[[OpenID Connectの追加クレーム>#g7df69b2]]+[[α>#k722ecb6]]

*考察 [#vebd7c4e]
**プロファイルの識別方法 [#m07867a9]
特に問題無いが、既存の(クライアント認証無しの)Flowは拒否しないといけない?~
([[OpenID Connect]]のように、「scope="* openid *"」などの識別方法が提要されていないため)

*参考 [#w0534ff5]
-Financial Services – Financial API - Part 2: Read and Write API Security Profile~
http://openid.net/specs/openid-financial-api-part-2.html
>FAPI Read and Writeセキュリティ・プロファイル

-Financial API 実装の技術課題 - Qiita > FAPI Part 2~
https://qiita.com/TakahikoKawasaki/items/48a9d22205f77db59726#fapi-part-2

**LoA [#h48691d5]
-認証連携普及のために~信頼フレームワークの構築~ | NTTデータ~
http://www.nttdata.com/jp/ja/insights/trend_keyword/2013121901.html

----
Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS