CIBA(Client Initiated Backchannel Authentication)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[OAuth 2.0 拡張]]
--[[OpenID Connect]]
* 目次 [#x774c2a7]
#contents
*概要 [#ta7069e9]
CIBAは、シーバと読み「新たなユーザ認証体験」のベースとな...
-デバイスを
--サービス利用
--ユーザー認証
>に分離することによりユーザー認証体験の可能性が広がる。
-以下の両分野がCIBAの標準化を進めている。
--モバイル
--金融API
>※ OpenID Foundation の MODRNA(マッダーヌァ) WG (mobile...
MODRNA : Mobile Operator Discovery, Registration & a...
**イメージ [#z474bd0a]
#ref(ciba.png,left,nowrap,CIBA)
**用語 [#afb03bc6]
-基本的な用語は、OAuth2/OIDCと変わらない。
-その他、以下の用語が追加されている。
***Consumption Device (CD) [#gfdf9430]
CIBA Flow ユーザ(なんでもOK)だが、~
基本的にConfidential Client(RP)を経由する。
***Authentication Device (AD) [#n4cd6119]
-認証デバイス~
EndUser(≒ Resource Owner)の~
所有物として認証されているデバイス。
-Publicであるが、Public "Client"ではない。
--要するに、従来の[[OAuth2の登場人物>OAuth#zb38b595]]の範...
--従って、CIBAの仕様上でも、仕様の詳細は語られない。
-認証デバイスへの通知には、スマホの[[プッシュ通知>#v6eb33...
***BA EP(バックチャネル認証エンドポイント) [#u44eb79c]
フロントエンドからリーチしない~
Confidential Client(RP)経由の~
バックチャネルと言う事だろうか。
-AuthZ(IdP/STS)に追加される新たな認証エンドポイント。
-AuthZは[[CD>#gfdf9430]]からRP経由で認証リクエストを受付...
-非同期で、[[CD>#gfdf9430]]にRP経由で認証レスポンスを返す...
***その他、用語の差異 [#c4cd478c]
-認可リクエストではなく認証リクエスト
-しかし、AuthZ は AuthZ。AuthNではない。
-Resource Owner ではなく EndUser(ユーザ)
**ユースケース [#n46fc07e]
以下のようなユースケースがある。
-銀行窓口での顧客認証
-コールセンタにおける発信者認証
-ユーザのスマホで POS 端末の支払い
***ポイント [#z9c24ef2]
CIBAのユースケースのポイントは、
-認証リクエストする人と、
-スマホの認可 or 拒否ボタンを押下する人が、
違うコトであるもよう。
***同一人物の場合 [#i7e625ea]
-2FA的な意味合いも無いので微妙。~
(CIBAの[[AD>#n4cd6119]]を2FAに転用することは可能だが)
-パスワードレス的な意味も無い。
--仕様に詳しく書かれていないが、[[AD>#n4cd6119]]であって...
--AuthZ と [[AD>#n4cd6119]] が [[FIDO]] や [[WebAuthn>Web...
**[[OAuth 2.0 Device Flow]]との違い。 [#se69e4c7]
***[[CD>#gfdf9430]], [[AD>#n4cd6119]] の分離 [#c08888c1]
認可リクエストを行う人と、認可 or 拒否ボタンを押下する人...
-[[OAuth 2.0 Device Flow]]
--Device は、
---IdP/STS(OP)にDevice Flow独自エンドポイントに認証リク...
---認証レスポンスから受け取ったURIとCodeを画面に表示する...
--ユーザは、URIでIdP/STS(OP)に接続し、対話する(認可 or...
(仕様に詳しく書かれていないが、AuthZ Serverに追加した画...
--上記の後、Device は、TokenリクエストをPollingする。
-CIBA
--[[CD>#gfdf9430]] は、IdP/STS(OP)にCIBA独自バックチャ...
--IdP/STS(OP)が [[AD>#n4cd6119]] を用いて要求を認証する...
--ユーザは、[[プッシュ通知>#v6eb33df]]をトリガにして [[AD...
(仕様に詳しく書かれていないが、[[PKCE>OAuth PKCE]]などで...
--上記の後、[[CD>#gfdf9430]] は、Tokenリクエストを[[Polli...
***事前のユーザー識別 [#refe6482]
Clientの、事前のユーザー識別は必要になる。
-[[OAuth 2.0 Device Flow]]
--不要(ユーザは1名)
--認可 or 拒否ボタンを押下する画面を~
参照するためにAuthZにログインしたユーザが唯一のユーザ
-CIBA~
必要(ユーザは2名)
--[[CD>#gfdf9430]]
---要求時、Client が IdP/STS(OP)に認証対象ユーザを通知...
---IdP/STS(OP)は、認証対象ユーザの[[AD>#n4cd6119]]を特...
--[[AD>#n4cd6119]]~
仕様に詳しく書かれていないが、[[AD>#n4cd6119]]でも認証が...
*詳細(フロー) [#a3ba36e2]
フローを見ると、RedirectによるOAuthダンスではなく、[[OAut...
デバイスへの通知にSMSではなく、スマホの[[プッシュ通知>#v6...
-従来の従来のOAuthダンスは「Redirect フロー」と言うらしい。
-CIBA は「Decoupled フロー」と言うらしい(decoupled and b...
--decoupled:
---Client(Webアプリ)と認証デバイス(≒スマホ)に分離。
---其々のスマホを、[[Consumption Device (CD) 、Authentica...
--back-channel:~
[[BA EP(バックチャネル認証エンドポイント)>#afb03bc6]]
**認可エンドポイント [#k24365ee]
認証リクエストを受け付けて直ちにレスポンスする(以後、非...
***認可リクエスト [#y479f65b]
-ユーザ特定が必要になるので、
--クライアントがAuthZの認証リクエストを投げる際、~
以下のパラメタのどれか一つをヒントとしてサーバに渡す。
---login_hint_token
---id_token_hint
---login_hint
--サーバはそのヒントを元に認証対象ユーザを特定する。
-パラメタ
--scope
---OAuth2.0のscopeと同じ。
---CIBAではopenidスコープ値が含まれている必要がある。
--client_notification_token
---Ping / Pushモードの際のCallback URIに渡すBearer Token
---1024文字以下(128bit以上で、160bit前後)の乱数を含む自...
--acr_values (OPTIONAL)~
[[認証コンテキスト クラス>OpenID Connect - Authentication...
--各種ヒント (OPTIONAL)
---login_hint~
エンドユーザーを識別するe-mail、TEL、sub、userName、userI...
---login_hint_token~
エンドユーザーを識別するためのトークン~
(署名が必要≒JWS)
---id_token_hint~
エンドユーザーを識別するためのIDトークン~
(JWS or JWEでissとaudを検証、期限切れも処理)
--requested_expiry (OPTIONAL)~
auth_req_idのexpires_in値を要求できるようにする正の整数。
-クライアント認証方法
--client_idや、[[JWT bearer token authorizationグラント種...
--推奨は、公開鍵暗号で、署名有り認可リクエスト([[Request...
-リクエスト例
--署名無し
POST /bc-authorize HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
scope=openid%20email%20example-scope&
client_notification_token=8d67dc78-7faa-4d41-aabd-6770...
binding_message=W4SCT&
login_hint_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
--署名有り~
[[Requestオブジェクト>OpenID Connect - Requestオブジェク...
---Request自体
POST /bc-authorize HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
request=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
---[[Requestオブジェクト>OpenID Connect - Requestオブジェ...
別途、iss, aud, exp, iat, nbf, jtiの追加が必要(JWSのみで...
{
"iss": "s6BhdRkqt3",
"aud": "https://server.example.com",
"exp": 1537820086,
"iat": 1537819486,
"nbf": 1537818886,
"jti": "4LTCqACC2ESC5BWCnN3j58EnA",
"scope": "openid email example-scope",
"client_notification_token": "8d67dc78-7faa-4d41-aab...
"binding_message": "W4SCT",
"login_hint_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
***認可レスポンス [#z8711778]
-パラメタ
--auth_req_id
---必須。
---[[プッシュ通知>#v6eb33df]] → 認証ボタン押下を識別する...
---1024文字以下(128bit以上で、160bit前後)の乱数を含む自...
--expires_in
---必須
---auth_req_id、user_codeの有効期間(秒)。
--interval
---オプション
---Polling / Pingの間隔
--認証デバイスに飛んできた認証要求が~
正当なものかどうかを確認するためのパラメタを返す。
---binding_message (OPTIONAL)~
・かなり短い単純な文字列であることが想定されている。~
・Biding Messageを[[CD>#gfdf9430]]と[[AD>#n4cd6119]]の画...
・比較的短く、プレーンテキスト文字の限られたセットを使用...
---user_code (OPTIONAL)~
・未認証状態で送信可能な[[プッシュ通知>#v6eb33df]]技術の...
・認証状態でのみ利用可能な[[プッシュ通知>#v6eb33df]]の場...
・backchannel_user_code_parameterがtureの場合、configとし...
・[[AD>#n4cd6119]]の[[プッシュ通知>#v6eb33df]]に表示し、...
-レスポンス例
--成功
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac...
"expires_in": 3600,
"interval": 2
}
--失敗
---HTTP/1.1 400 Bad Request~
invalid_request, invalid_scope, expired_login_hint_token,...
unauthorized_client, missing_user_code, invalid_user_code...
Content-Type: application/json
{
"error": "unauthorized_client",
"error_description": "The client 'client.example.org'...
}
---HTTP 401 Unauthorized
Content-Type: application/json
{
"error": "invalid_client",
"error_description": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
---HTTP 403 Forbidden
Content-Type: application/json
{
"error": "access_denied",
"error_description": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
***エラーの返却 [#ra040afb]
-POSTのJSON返却なので、[[Tokenエンドポイントのレスポンス...
-以下のレスポンスは、user_codeを要求するCIBAで追加された...
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error":"missing_user_code"
}
**通知->認証 [#r0e5aee2]
***通知 [#ree84563]
特定した認証対象ユーザのスマホに[[プッシュ通知>#v6eb33df]...
-binding_messageを表示する。
-[[CD>#gfdf9430]]から指定された場合は、user_codeを入力さ...
***認証 [#p4811805]
PKCE認証などして、認可 or 拒否ボタン押下で、結果をIdP/STS...
**Tokenエンドポイント [#ae7a371f]
-上記の識別子を使用してTokenリクエストする。
-これにより、認証リクエストの結果とTokenレスポンスを返す。
-認証リクエストとの繋がりは非同期的なので、以下の、Pollin...
***Tokenリクエスト [#td76b143]
-概要
--認可リクエストの成功を確認した後、TokenリクエストのPoll...
--Pushの場合は、Pushをトリガにして、動き出す(しかし、結...
-パラメタ
--grant_type=urn:openid:params:grant-type:ciba
--auth_req_id
-リクエスト例
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
grant_type=urn%3Aopenid%3Aparams%3Agrant-type%3Aciba
&auth_req_id=1c266114-a1be-4252-8ad1-04986c5b9ac1
***Tokenレスポンス [#z70c2acf]
-成功~
[[OIDC>OpenID Connect#q4d3f512]]の認可レスポンス(成功)...
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"access_token": "G5kXH2wHvUra0sHlDy1iTkDJgsgUO1bN",
"token_type": "Bearer",
"refresh_token": "4bwc0ESC_IAhflf-ACC_vjD_ltc11ne-8g...
"expires_in": 3600,
"id_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
-失敗~
[[OAuth 2.0>OAuth#n037bd41]]の認可レスポンス(失敗)に以...
--パラメタ(≒エラーコード)
---authorization_pending~
認可リクエストは保留中
---slow_down~
"authorization_pending"の変形で~
Polling間隔を5秒遅らせろの意味。
---access_denied~
Resource Owner(EndUser)は、承認要求を拒否。
---expired_token~
auth_req_id、user_codeの有効期限が切れた。
---unauthorized_client~
PushモードのためCIBAでのTokenリクエストは不可。
--レスポンス例~
・・・
***ポイント [#qe881045]
-非同期方式
--Poll~
Client は IdP/STS(OP)の Token Endpoint を~
認証の識別子と共にPollingして応答を受け取る。
+--------+ ...
| | ...
| |<---(1) CIBA Request-------------------...
| | ...
| | +--------+ ...
| | | | ...
| Client | | AD |<--(2) User interactions---...
| | | | ...
| | +--------+ ...
| | ...
| |----(3a) CIBA Polling Request----------...
| |<---(3b) CIBA Polling Response---------...
| | ... ...
| |----(3a) CIBA Polling Request----------...
| |<---(3b) CIBA Polling Response---------...
| | ...
+--------+ ...
--Ping~
事前に Client が登録しておいた Callback URI に対して~
IdP/STS(OP)が認証の識別子と共に通知用のリクエストを送る。
+--------+ ...
| | ...
| |<---(1) CIBA Request-------------------...
| | ...
| | +--------+ ...
| | | | ...
| Client | | AD |<--(2) User interactions---...
| | | | ...
| | +--------+ ...
| | ...
| |<---(3) CIBA Ping Callback-------------...
| | ...
| |----(4a) CIBA Token Request------------...
| |<---(4b) CIBA Token Response-----------...
+--------+ ...
---以下の成功のレスポンスを受け取り、Bearerが、~
無効な場合、HTTP 204 No Content or HTTP 200 OK をレスポン...
無効な場合、HTTP 401 Unauthorized をレスポンス。
POST /cb HTTP/1.1
Host: client.example.com
Authorization: Bearer 8d67dc78-7faa-4d41-aabd-67707b3...
Content-Type: application/json
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac1"
}
---以下の失敗のレスポンスを受け取り、Bearerが、~
無効な場合、HTTP 204 No Content or HTTP 200 OK をレスポン...
無効な場合、HTTP 401 Unauthorized をレスポンス。
POST /cb HTTP/1.1
Host: client.example.com
Authorization: Bearer 8d67dc78-7faa-4d41-aabd-67707b3...
Content-Type: application/json
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac1",
"error": "access_denied" or "expired_token" or "tran...
"error_description": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
---成功のレスポンスの後、Client は Tokenリクエストを行いT...
---良く解らないが、Pingで構成されたClientはPollingも可能...
--Push
---事前に Client が登録しておいた Callback URI に対して~
IdP/STS(OP)がトークンを含むリクエストを送る。
+--------+ ...
| | ...
| |<---(1) CIBA Request-------------------...
| | ...
| | +--------+ ...
| | | | ...
| Client | | AD |<--(2) User interactions---...
| | | | ...
| | +--------+ ...
| | ...
| |<---(3) CIBA Push Callback-------------...
| | ...
+--------+ ...
---Tokenレスポンス・ライクなレスポンスが返り、Bearerが、~
無効な場合、HTTP 204 No Content or HTTP 200 OK をレスポン...
無効な場合、HTTP 401 Unauthorized をレスポンス。
POST /cb HTTP/1.1
Host: client.example.com
Authorization: Bearer 8d67dc78-7faa-4d41-aabd-67707b3...
Content-Type: application/json
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac1",
"access_token": "G5kXH2wHvUra0sHlDy1iTkDJgsgUO1bN",
"token_type": "Bearer",
"refresh_token": "4bwc0ESC_IAhflf-ACC_vjD_ltc11ne-8g...
"expires_in": 3600,
"id_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
---id_tokenを検証する(改ざんされていないか確認)。~
urn:openid:params:jwt:claim:auth_req_idの一致と、~
at_hashを使用したaccess_token検証~
rt_hashを使用したrefresh_token検証
{
"iss": "https://server.example.com",
"sub": "248289761001",
"aud": "s6BhdRkqt3",
"email": "janedoe@example.com",
"exp": 1537819803,
"iat": 1537819503,
"at_hash": "Wt0kVFXMacqvnHeyU0001w",
"urn:openid:params:jwt:claim:rt_hash": "sHahCuSpXCR...
"urn:openid:params:jwt:claim:auth_req_id":
"1c266114-a1be-4252-8ad1-04986c5b9ac1"
}
-[[PPID>OpenID Connect#m3999d6f]]の利用(subject_type が ...
--Polling / Pingモード
---PPID計算のセクター識別子としてjwks_uriを使用する。
---故に、登録フェーズでjwks_uriを提供する必要がある。
---sector_identifier_uriを提示する場合、ココに、jwks_uri...
---jwks_uriの妥当性はクライアント認証を用いることで検証可...
--Pushモード
---PPID計算のセクター識別子としてbackchannel_client_notif...
---sector_identifier_uriを提示する場合、ココに、backchann...
---jwks_uri異なり、backchannel_client_notification_endpoi...
--[[PPID計算のセクター識別子の登録の例>#ca31c8b1]]。
--[[FAPI Profileでの気付き。>#of2b90f9]]
**その他 [#hbe781e6]
***メタデータ [#ca31c8b1]
-IdP
--必須
---grant_types~
grant_types_supported に urn:openid:params:grant-type:cib...
---認可エンドポイント~
backchannel_authentication_endpoint を追加。
---非同方式~
backchannel_token_delivery_modes_supported : ["poll", "pi...
--オプション
---認可リクエストの署名アルゴリズム~
backchannel_authentication_request_signing_alg_values_sup...
---user_codeのサポートの有・無(デフォルト値はfalse)~
backchannel_user_code_parameter_supported
-Client
--必須
---非同方式~
backchannel_token_delivery_mode : "poll" or "ping" or "pu...
--オプション
---PingまたはPushの際のCallbackエンドポイント~
backchannel_client_notification_endpoint
---認可リクエストの署名アルゴリズム(既定値は署名無し)~
backchannel_authentication_request_signing_alg
---user_codeのサポートの有・無(デフォルト値はfalse)~
backchannel_user_code_parameter
--登録の例
POST /connect/register HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: server.example.com
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJ ...
{
"application_type": "web",
"client_name": "My Example",
"logo_uri": "https://client.example.org/logo.png",
"subject_type": "pairwise",
"token_endpoint_auth_method": "private_key_jwt",
"grant_types": ["urn:openid:params:grant-type:cib...
"backchannel_token_delivery_mode": "poll",
"jwks_uri": "https://client.example.org/my_public...
"userinfo_encrypted_response_alg": "RSA1_5",
"userinfo_encrypted_response_enc": "A128CBC-HS256",
"contacts": ["ve7jtb@example.org", "mary@example....
}
***セキュリティ考慮事項 [#ga4f18e9]
-PPIDを含むIDトークン~
使用可能である模様(確かにclient_idでPPID計算のセクター識...
-使い捨てユーザーID~
[[AD>#n4cd6119]]で認証後にIDを生成し、[[QRコード>https://...
-ディスカバリー・サービス~
RPがユーザーをディスカバリサービスからlogin_hint_tokenを...
*[[FAPI>Financial API (FAPI)]] [#fc870e7d]
-CIBAは、FAPIと直接関係は無いが、
-FAPI-CIBA プロファイルという新仕様がUK OBIEから寄付(201...
-プロファイルは、読み取り専用APIと読み取り/書き込みAPIの...
-以下が前提知識として必要になる。
--[[FAPI Part 1 (Read Only API Security Profile)]]
--[[FAPI Part 2 (Read and Write API Security Profile)]]
**要約 [#l8e736a2]
***AuthN Server [#of2b90f9]
-FAPI-CIBA プロファイルを使えるのはConfidential Clientの...
-認可リクエスト
--JARを使用する。
---nbf クレームと exp クレームを含む。
---JWT の生存期間は 60 分以内。
---PPIDについては(、redirect_uriが無いので)、request_ur...
...その場合、URNのヘッダ部分をClient毎に固定する必要があ...
(そもそもCIBAは外部ログインには使用しないので、匿名にな...
(また、そもそもCIBAするClientは、名寄せなどを行わなそう...
--request_context パラメーターが含まれることを要求しても...
---詐欺や脅威の決定を知らせるJSONオブジェクト(内容は仕様...
---例:[[CD>#gfdf9430]]に位置情報を提供するために、信頼関...
--login_hint や login_hint_token を流用してはならない。~
(流用とは、例えば、この項目を下記の意図(intent)に使用...
--複雑な認可パラメタを伝える場合、"lodging intent"パター...
例えば、アクセスの範囲(scope)ではなくて、意図(intent)...
(intentは、[[PARやRAR>JWTとOAuth2.0#o9b238a2]]で指定する...
-非同期方式
--Pollingモードをサポートしなければならない
--Pushモードをサポートしてはならない
--Pingモードをサポートしてもよい
-以下の何れかが必須
--認可コンテキストが一意(抽象的)
--binding_messageが必須(具体的)
***Client [#r6cb2be5]
-[[CD>#gfdf9430]]
--[[CD>#gfdf9430]]は、下記ヘッダを送信してはならない
---x-fapi-auth-date
---x-fapi-consumer-ip-address
--代わりに、以下の情報を送るべきである
---位置情報
---デバイスタイプ
**セキュリティ考慮事項 [#cff6ebb6]
-login_hint や login_hint_token
--login_hintに広く知られている識別子(電話番号など)使用...
--login_hint_tokenはチャネルに適切であることを確認する必...
-binding_messageに加え、~
(必要に応じて)user_code パラメタも使用した方がイイ。
-JWT署名
--ES256 と PS256のみ許可
--RSA1_5(≒ RSXXX)は禁止
-TLS~
暗号スイートの許可リストに含めるべき。
--TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
--TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
*参考 [#hdf3c138]
**内部 [#tbb9bcdf]
***[[Financial API (FAPI)]] [#me75d2c7]
***[[プッシュ通知>https://dotnetdevelopmentinfrastructure...
**外部 [#d899d631]
-openid / fapi / 課題 / #127 - CIBA: security issues — Bi...
https://bitbucket.org/openid/fapi/issues/127/ciba-securit...
-【技術解説】OpenID Connect CIBA 実装の具体例と考慮すべき...
https://www.secure-sketch.com/blog/openid-connect-ciba-im...
***OpenID [#maf4557e]
-OpenID Connect Client Initiated Backchannel Authenticati...
https://openid.net/specs/openid-client-initiated-backchan...
-Financial-grade API: Client Initiated Backchannel Authen...
https://openid.net/specs/openid-financial-api-ciba-ID1.html
***TakahikoKawasaki [#w6fc5ef3]
-Qiita
--【2019年版】世界最先端の認証認可技術、実装者による『CIB...
https://qiita.com/TakahikoKawasaki/items/9b9616b999d4ce95...
--FAPI-CIBA プロファイル~
https://qiita.com/TakahikoKawasaki/items/f478e2fd07b7236d...
--Authlete を使って CIBA 対応の認可サーバーを作る~
https://qiita.com/hidebike712/items/8fc2938055d0b49cfc0a
***tkudo [#t0cf0a95]
-CIBA (Client Initiated Backchannel Authentication) の可...
https://www.slideshare.net/tkudo/openid-connect-ciba-over...
-FAPI (Financial-grade API) and CIBA (Client Initiated Ba...
https://www.slideshare.net/tkudo/fapi-ciba-2019-03-28
***ritou [#f98f2c49]
-OIDC Client Initiated Backchannel Authentication Flow (C...
--概要編~
https://ritou.hatenablog.com/entry/2018/12/29/224452
--詳細もとい感想編~
https://ritou.hatenablog.com/entry/2019/03/04/005238
--CIBAの認証フローを体験するためのWebアプリ(途中経過)~
https://ritou.hatenablog.com/entry/2019/06/03/070000
**OSSコンソーシアム [#j68b8691]
***開発基盤部会 Blog [#m4873357]
-FAPI-CIBAプロファイルを実装してみようかな~
(次いでにOAuth2 Device Flowも)。~
https://www.osscons.jp/jovbqpaa0-537/
-FAPI-CIBA プロファイルの実装を開始した。~
https://www.osscons.jp/jov3wu676-537/
-[[CIBA開発に見た。スタックは出来るがコラボが難しい件のデ...
----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認...
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[OAuth 2.0 拡張]]
--[[OpenID Connect]]
* 目次 [#x774c2a7]
#contents
*概要 [#ta7069e9]
CIBAは、シーバと読み「新たなユーザ認証体験」のベースとな...
-デバイスを
--サービス利用
--ユーザー認証
>に分離することによりユーザー認証体験の可能性が広がる。
-以下の両分野がCIBAの標準化を進めている。
--モバイル
--金融API
>※ OpenID Foundation の MODRNA(マッダーヌァ) WG (mobile...
MODRNA : Mobile Operator Discovery, Registration & a...
**イメージ [#z474bd0a]
#ref(ciba.png,left,nowrap,CIBA)
**用語 [#afb03bc6]
-基本的な用語は、OAuth2/OIDCと変わらない。
-その他、以下の用語が追加されている。
***Consumption Device (CD) [#gfdf9430]
CIBA Flow ユーザ(なんでもOK)だが、~
基本的にConfidential Client(RP)を経由する。
***Authentication Device (AD) [#n4cd6119]
-認証デバイス~
EndUser(≒ Resource Owner)の~
所有物として認証されているデバイス。
-Publicであるが、Public "Client"ではない。
--要するに、従来の[[OAuth2の登場人物>OAuth#zb38b595]]の範...
--従って、CIBAの仕様上でも、仕様の詳細は語られない。
-認証デバイスへの通知には、スマホの[[プッシュ通知>#v6eb33...
***BA EP(バックチャネル認証エンドポイント) [#u44eb79c]
フロントエンドからリーチしない~
Confidential Client(RP)経由の~
バックチャネルと言う事だろうか。
-AuthZ(IdP/STS)に追加される新たな認証エンドポイント。
-AuthZは[[CD>#gfdf9430]]からRP経由で認証リクエストを受付...
-非同期で、[[CD>#gfdf9430]]にRP経由で認証レスポンスを返す...
***その他、用語の差異 [#c4cd478c]
-認可リクエストではなく認証リクエスト
-しかし、AuthZ は AuthZ。AuthNではない。
-Resource Owner ではなく EndUser(ユーザ)
**ユースケース [#n46fc07e]
以下のようなユースケースがある。
-銀行窓口での顧客認証
-コールセンタにおける発信者認証
-ユーザのスマホで POS 端末の支払い
***ポイント [#z9c24ef2]
CIBAのユースケースのポイントは、
-認証リクエストする人と、
-スマホの認可 or 拒否ボタンを押下する人が、
違うコトであるもよう。
***同一人物の場合 [#i7e625ea]
-2FA的な意味合いも無いので微妙。~
(CIBAの[[AD>#n4cd6119]]を2FAに転用することは可能だが)
-パスワードレス的な意味も無い。
--仕様に詳しく書かれていないが、[[AD>#n4cd6119]]であって...
--AuthZ と [[AD>#n4cd6119]] が [[FIDO]] や [[WebAuthn>Web...
**[[OAuth 2.0 Device Flow]]との違い。 [#se69e4c7]
***[[CD>#gfdf9430]], [[AD>#n4cd6119]] の分離 [#c08888c1]
認可リクエストを行う人と、認可 or 拒否ボタンを押下する人...
-[[OAuth 2.0 Device Flow]]
--Device は、
---IdP/STS(OP)にDevice Flow独自エンドポイントに認証リク...
---認証レスポンスから受け取ったURIとCodeを画面に表示する...
--ユーザは、URIでIdP/STS(OP)に接続し、対話する(認可 or...
(仕様に詳しく書かれていないが、AuthZ Serverに追加した画...
--上記の後、Device は、TokenリクエストをPollingする。
-CIBA
--[[CD>#gfdf9430]] は、IdP/STS(OP)にCIBA独自バックチャ...
--IdP/STS(OP)が [[AD>#n4cd6119]] を用いて要求を認証する...
--ユーザは、[[プッシュ通知>#v6eb33df]]をトリガにして [[AD...
(仕様に詳しく書かれていないが、[[PKCE>OAuth PKCE]]などで...
--上記の後、[[CD>#gfdf9430]] は、Tokenリクエストを[[Polli...
***事前のユーザー識別 [#refe6482]
Clientの、事前のユーザー識別は必要になる。
-[[OAuth 2.0 Device Flow]]
--不要(ユーザは1名)
--認可 or 拒否ボタンを押下する画面を~
参照するためにAuthZにログインしたユーザが唯一のユーザ
-CIBA~
必要(ユーザは2名)
--[[CD>#gfdf9430]]
---要求時、Client が IdP/STS(OP)に認証対象ユーザを通知...
---IdP/STS(OP)は、認証対象ユーザの[[AD>#n4cd6119]]を特...
--[[AD>#n4cd6119]]~
仕様に詳しく書かれていないが、[[AD>#n4cd6119]]でも認証が...
*詳細(フロー) [#a3ba36e2]
フローを見ると、RedirectによるOAuthダンスではなく、[[OAut...
デバイスへの通知にSMSではなく、スマホの[[プッシュ通知>#v6...
-従来の従来のOAuthダンスは「Redirect フロー」と言うらしい。
-CIBA は「Decoupled フロー」と言うらしい(decoupled and b...
--decoupled:
---Client(Webアプリ)と認証デバイス(≒スマホ)に分離。
---其々のスマホを、[[Consumption Device (CD) 、Authentica...
--back-channel:~
[[BA EP(バックチャネル認証エンドポイント)>#afb03bc6]]
**認可エンドポイント [#k24365ee]
認証リクエストを受け付けて直ちにレスポンスする(以後、非...
***認可リクエスト [#y479f65b]
-ユーザ特定が必要になるので、
--クライアントがAuthZの認証リクエストを投げる際、~
以下のパラメタのどれか一つをヒントとしてサーバに渡す。
---login_hint_token
---id_token_hint
---login_hint
--サーバはそのヒントを元に認証対象ユーザを特定する。
-パラメタ
--scope
---OAuth2.0のscopeと同じ。
---CIBAではopenidスコープ値が含まれている必要がある。
--client_notification_token
---Ping / Pushモードの際のCallback URIに渡すBearer Token
---1024文字以下(128bit以上で、160bit前後)の乱数を含む自...
--acr_values (OPTIONAL)~
[[認証コンテキスト クラス>OpenID Connect - Authentication...
--各種ヒント (OPTIONAL)
---login_hint~
エンドユーザーを識別するe-mail、TEL、sub、userName、userI...
---login_hint_token~
エンドユーザーを識別するためのトークン~
(署名が必要≒JWS)
---id_token_hint~
エンドユーザーを識別するためのIDトークン~
(JWS or JWEでissとaudを検証、期限切れも処理)
--requested_expiry (OPTIONAL)~
auth_req_idのexpires_in値を要求できるようにする正の整数。
-クライアント認証方法
--client_idや、[[JWT bearer token authorizationグラント種...
--推奨は、公開鍵暗号で、署名有り認可リクエスト([[Request...
-リクエスト例
--署名無し
POST /bc-authorize HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
scope=openid%20email%20example-scope&
client_notification_token=8d67dc78-7faa-4d41-aabd-6770...
binding_message=W4SCT&
login_hint_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
--署名有り~
[[Requestオブジェクト>OpenID Connect - Requestオブジェク...
---Request自体
POST /bc-authorize HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
request=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
---[[Requestオブジェクト>OpenID Connect - Requestオブジェ...
別途、iss, aud, exp, iat, nbf, jtiの追加が必要(JWSのみで...
{
"iss": "s6BhdRkqt3",
"aud": "https://server.example.com",
"exp": 1537820086,
"iat": 1537819486,
"nbf": 1537818886,
"jti": "4LTCqACC2ESC5BWCnN3j58EnA",
"scope": "openid email example-scope",
"client_notification_token": "8d67dc78-7faa-4d41-aab...
"binding_message": "W4SCT",
"login_hint_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
***認可レスポンス [#z8711778]
-パラメタ
--auth_req_id
---必須。
---[[プッシュ通知>#v6eb33df]] → 認証ボタン押下を識別する...
---1024文字以下(128bit以上で、160bit前後)の乱数を含む自...
--expires_in
---必須
---auth_req_id、user_codeの有効期間(秒)。
--interval
---オプション
---Polling / Pingの間隔
--認証デバイスに飛んできた認証要求が~
正当なものかどうかを確認するためのパラメタを返す。
---binding_message (OPTIONAL)~
・かなり短い単純な文字列であることが想定されている。~
・Biding Messageを[[CD>#gfdf9430]]と[[AD>#n4cd6119]]の画...
・比較的短く、プレーンテキスト文字の限られたセットを使用...
---user_code (OPTIONAL)~
・未認証状態で送信可能な[[プッシュ通知>#v6eb33df]]技術の...
・認証状態でのみ利用可能な[[プッシュ通知>#v6eb33df]]の場...
・backchannel_user_code_parameterがtureの場合、configとし...
・[[AD>#n4cd6119]]の[[プッシュ通知>#v6eb33df]]に表示し、...
-レスポンス例
--成功
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac...
"expires_in": 3600,
"interval": 2
}
--失敗
---HTTP/1.1 400 Bad Request~
invalid_request, invalid_scope, expired_login_hint_token,...
unauthorized_client, missing_user_code, invalid_user_code...
Content-Type: application/json
{
"error": "unauthorized_client",
"error_description": "The client 'client.example.org'...
}
---HTTP 401 Unauthorized
Content-Type: application/json
{
"error": "invalid_client",
"error_description": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
---HTTP 403 Forbidden
Content-Type: application/json
{
"error": "access_denied",
"error_description": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
***エラーの返却 [#ra040afb]
-POSTのJSON返却なので、[[Tokenエンドポイントのレスポンス...
-以下のレスポンスは、user_codeを要求するCIBAで追加された...
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error":"missing_user_code"
}
**通知->認証 [#r0e5aee2]
***通知 [#ree84563]
特定した認証対象ユーザのスマホに[[プッシュ通知>#v6eb33df]...
-binding_messageを表示する。
-[[CD>#gfdf9430]]から指定された場合は、user_codeを入力さ...
***認証 [#p4811805]
PKCE認証などして、認可 or 拒否ボタン押下で、結果をIdP/STS...
**Tokenエンドポイント [#ae7a371f]
-上記の識別子を使用してTokenリクエストする。
-これにより、認証リクエストの結果とTokenレスポンスを返す。
-認証リクエストとの繋がりは非同期的なので、以下の、Pollin...
***Tokenリクエスト [#td76b143]
-概要
--認可リクエストの成功を確認した後、TokenリクエストのPoll...
--Pushの場合は、Pushをトリガにして、動き出す(しかし、結...
-パラメタ
--grant_type=urn:openid:params:grant-type:ciba
--auth_req_id
-リクエスト例
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
grant_type=urn%3Aopenid%3Aparams%3Agrant-type%3Aciba
&auth_req_id=1c266114-a1be-4252-8ad1-04986c5b9ac1
***Tokenレスポンス [#z70c2acf]
-成功~
[[OIDC>OpenID Connect#q4d3f512]]の認可レスポンス(成功)...
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"access_token": "G5kXH2wHvUra0sHlDy1iTkDJgsgUO1bN",
"token_type": "Bearer",
"refresh_token": "4bwc0ESC_IAhflf-ACC_vjD_ltc11ne-8g...
"expires_in": 3600,
"id_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
-失敗~
[[OAuth 2.0>OAuth#n037bd41]]の認可レスポンス(失敗)に以...
--パラメタ(≒エラーコード)
---authorization_pending~
認可リクエストは保留中
---slow_down~
"authorization_pending"の変形で~
Polling間隔を5秒遅らせろの意味。
---access_denied~
Resource Owner(EndUser)は、承認要求を拒否。
---expired_token~
auth_req_id、user_codeの有効期限が切れた。
---unauthorized_client~
PushモードのためCIBAでのTokenリクエストは不可。
--レスポンス例~
・・・
***ポイント [#qe881045]
-非同期方式
--Poll~
Client は IdP/STS(OP)の Token Endpoint を~
認証の識別子と共にPollingして応答を受け取る。
+--------+ ...
| | ...
| |<---(1) CIBA Request-------------------...
| | ...
| | +--------+ ...
| | | | ...
| Client | | AD |<--(2) User interactions---...
| | | | ...
| | +--------+ ...
| | ...
| |----(3a) CIBA Polling Request----------...
| |<---(3b) CIBA Polling Response---------...
| | ... ...
| |----(3a) CIBA Polling Request----------...
| |<---(3b) CIBA Polling Response---------...
| | ...
+--------+ ...
--Ping~
事前に Client が登録しておいた Callback URI に対して~
IdP/STS(OP)が認証の識別子と共に通知用のリクエストを送る。
+--------+ ...
| | ...
| |<---(1) CIBA Request-------------------...
| | ...
| | +--------+ ...
| | | | ...
| Client | | AD |<--(2) User interactions---...
| | | | ...
| | +--------+ ...
| | ...
| |<---(3) CIBA Ping Callback-------------...
| | ...
| |----(4a) CIBA Token Request------------...
| |<---(4b) CIBA Token Response-----------...
+--------+ ...
---以下の成功のレスポンスを受け取り、Bearerが、~
無効な場合、HTTP 204 No Content or HTTP 200 OK をレスポン...
無効な場合、HTTP 401 Unauthorized をレスポンス。
POST /cb HTTP/1.1
Host: client.example.com
Authorization: Bearer 8d67dc78-7faa-4d41-aabd-67707b3...
Content-Type: application/json
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac1"
}
---以下の失敗のレスポンスを受け取り、Bearerが、~
無効な場合、HTTP 204 No Content or HTTP 200 OK をレスポン...
無効な場合、HTTP 401 Unauthorized をレスポンス。
POST /cb HTTP/1.1
Host: client.example.com
Authorization: Bearer 8d67dc78-7faa-4d41-aabd-67707b3...
Content-Type: application/json
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac1",
"error": "access_denied" or "expired_token" or "tran...
"error_description": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
---成功のレスポンスの後、Client は Tokenリクエストを行いT...
---良く解らないが、Pingで構成されたClientはPollingも可能...
--Push
---事前に Client が登録しておいた Callback URI に対して~
IdP/STS(OP)がトークンを含むリクエストを送る。
+--------+ ...
| | ...
| |<---(1) CIBA Request-------------------...
| | ...
| | +--------+ ...
| | | | ...
| Client | | AD |<--(2) User interactions---...
| | | | ...
| | +--------+ ...
| | ...
| |<---(3) CIBA Push Callback-------------...
| | ...
+--------+ ...
---Tokenレスポンス・ライクなレスポンスが返り、Bearerが、~
無効な場合、HTTP 204 No Content or HTTP 200 OK をレスポン...
無効な場合、HTTP 401 Unauthorized をレスポンス。
POST /cb HTTP/1.1
Host: client.example.com
Authorization: Bearer 8d67dc78-7faa-4d41-aabd-67707b3...
Content-Type: application/json
{
"auth_req_id": "1c266114-a1be-4252-8ad1-04986c5b9ac1",
"access_token": "G5kXH2wHvUra0sHlDy1iTkDJgsgUO1bN",
"token_type": "Bearer",
"refresh_token": "4bwc0ESC_IAhflf-ACC_vjD_ltc11ne-8g...
"expires_in": 3600,
"id_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
}
---id_tokenを検証する(改ざんされていないか確認)。~
urn:openid:params:jwt:claim:auth_req_idの一致と、~
at_hashを使用したaccess_token検証~
rt_hashを使用したrefresh_token検証
{
"iss": "https://server.example.com",
"sub": "248289761001",
"aud": "s6BhdRkqt3",
"email": "janedoe@example.com",
"exp": 1537819803,
"iat": 1537819503,
"at_hash": "Wt0kVFXMacqvnHeyU0001w",
"urn:openid:params:jwt:claim:rt_hash": "sHahCuSpXCR...
"urn:openid:params:jwt:claim:auth_req_id":
"1c266114-a1be-4252-8ad1-04986c5b9ac1"
}
-[[PPID>OpenID Connect#m3999d6f]]の利用(subject_type が ...
--Polling / Pingモード
---PPID計算のセクター識別子としてjwks_uriを使用する。
---故に、登録フェーズでjwks_uriを提供する必要がある。
---sector_identifier_uriを提示する場合、ココに、jwks_uri...
---jwks_uriの妥当性はクライアント認証を用いることで検証可...
--Pushモード
---PPID計算のセクター識別子としてbackchannel_client_notif...
---sector_identifier_uriを提示する場合、ココに、backchann...
---jwks_uri異なり、backchannel_client_notification_endpoi...
--[[PPID計算のセクター識別子の登録の例>#ca31c8b1]]。
--[[FAPI Profileでの気付き。>#of2b90f9]]
**その他 [#hbe781e6]
***メタデータ [#ca31c8b1]
-IdP
--必須
---grant_types~
grant_types_supported に urn:openid:params:grant-type:cib...
---認可エンドポイント~
backchannel_authentication_endpoint を追加。
---非同方式~
backchannel_token_delivery_modes_supported : ["poll", "pi...
--オプション
---認可リクエストの署名アルゴリズム~
backchannel_authentication_request_signing_alg_values_sup...
---user_codeのサポートの有・無(デフォルト値はfalse)~
backchannel_user_code_parameter_supported
-Client
--必須
---非同方式~
backchannel_token_delivery_mode : "poll" or "ping" or "pu...
--オプション
---PingまたはPushの際のCallbackエンドポイント~
backchannel_client_notification_endpoint
---認可リクエストの署名アルゴリズム(既定値は署名無し)~
backchannel_authentication_request_signing_alg
---user_codeのサポートの有・無(デフォルト値はfalse)~
backchannel_user_code_parameter
--登録の例
POST /connect/register HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: server.example.com
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJ ...
{
"application_type": "web",
"client_name": "My Example",
"logo_uri": "https://client.example.org/logo.png",
"subject_type": "pairwise",
"token_endpoint_auth_method": "private_key_jwt",
"grant_types": ["urn:openid:params:grant-type:cib...
"backchannel_token_delivery_mode": "poll",
"jwks_uri": "https://client.example.org/my_public...
"userinfo_encrypted_response_alg": "RSA1_5",
"userinfo_encrypted_response_enc": "A128CBC-HS256",
"contacts": ["ve7jtb@example.org", "mary@example....
}
***セキュリティ考慮事項 [#ga4f18e9]
-PPIDを含むIDトークン~
使用可能である模様(確かにclient_idでPPID計算のセクター識...
-使い捨てユーザーID~
[[AD>#n4cd6119]]で認証後にIDを生成し、[[QRコード>https://...
-ディスカバリー・サービス~
RPがユーザーをディスカバリサービスからlogin_hint_tokenを...
*[[FAPI>Financial API (FAPI)]] [#fc870e7d]
-CIBAは、FAPIと直接関係は無いが、
-FAPI-CIBA プロファイルという新仕様がUK OBIEから寄付(201...
-プロファイルは、読み取り専用APIと読み取り/書き込みAPIの...
-以下が前提知識として必要になる。
--[[FAPI Part 1 (Read Only API Security Profile)]]
--[[FAPI Part 2 (Read and Write API Security Profile)]]
**要約 [#l8e736a2]
***AuthN Server [#of2b90f9]
-FAPI-CIBA プロファイルを使えるのはConfidential Clientの...
-認可リクエスト
--JARを使用する。
---nbf クレームと exp クレームを含む。
---JWT の生存期間は 60 分以内。
---PPIDについては(、redirect_uriが無いので)、request_ur...
...その場合、URNのヘッダ部分をClient毎に固定する必要があ...
(そもそもCIBAは外部ログインには使用しないので、匿名にな...
(また、そもそもCIBAするClientは、名寄せなどを行わなそう...
--request_context パラメーターが含まれることを要求しても...
---詐欺や脅威の決定を知らせるJSONオブジェクト(内容は仕様...
---例:[[CD>#gfdf9430]]に位置情報を提供するために、信頼関...
--login_hint や login_hint_token を流用してはならない。~
(流用とは、例えば、この項目を下記の意図(intent)に使用...
--複雑な認可パラメタを伝える場合、"lodging intent"パター...
例えば、アクセスの範囲(scope)ではなくて、意図(intent)...
(intentは、[[PARやRAR>JWTとOAuth2.0#o9b238a2]]で指定する...
-非同期方式
--Pollingモードをサポートしなければならない
--Pushモードをサポートしてはならない
--Pingモードをサポートしてもよい
-以下の何れかが必須
--認可コンテキストが一意(抽象的)
--binding_messageが必須(具体的)
***Client [#r6cb2be5]
-[[CD>#gfdf9430]]
--[[CD>#gfdf9430]]は、下記ヘッダを送信してはならない
---x-fapi-auth-date
---x-fapi-consumer-ip-address
--代わりに、以下の情報を送るべきである
---位置情報
---デバイスタイプ
**セキュリティ考慮事項 [#cff6ebb6]
-login_hint や login_hint_token
--login_hintに広く知られている識別子(電話番号など)使用...
--login_hint_tokenはチャネルに適切であることを確認する必...
-binding_messageに加え、~
(必要に応じて)user_code パラメタも使用した方がイイ。
-JWT署名
--ES256 と PS256のみ許可
--RSA1_5(≒ RSXXX)は禁止
-TLS~
暗号スイートの許可リストに含めるべき。
--TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
--TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
*参考 [#hdf3c138]
**内部 [#tbb9bcdf]
***[[Financial API (FAPI)]] [#me75d2c7]
***[[プッシュ通知>https://dotnetdevelopmentinfrastructure...
**外部 [#d899d631]
-openid / fapi / 課題 / #127 - CIBA: security issues — Bi...
https://bitbucket.org/openid/fapi/issues/127/ciba-securit...
-【技術解説】OpenID Connect CIBA 実装の具体例と考慮すべき...
https://www.secure-sketch.com/blog/openid-connect-ciba-im...
***OpenID [#maf4557e]
-OpenID Connect Client Initiated Backchannel Authenticati...
https://openid.net/specs/openid-client-initiated-backchan...
-Financial-grade API: Client Initiated Backchannel Authen...
https://openid.net/specs/openid-financial-api-ciba-ID1.html
***TakahikoKawasaki [#w6fc5ef3]
-Qiita
--【2019年版】世界最先端の認証認可技術、実装者による『CIB...
https://qiita.com/TakahikoKawasaki/items/9b9616b999d4ce95...
--FAPI-CIBA プロファイル~
https://qiita.com/TakahikoKawasaki/items/f478e2fd07b7236d...
--Authlete を使って CIBA 対応の認可サーバーを作る~
https://qiita.com/hidebike712/items/8fc2938055d0b49cfc0a
***tkudo [#t0cf0a95]
-CIBA (Client Initiated Backchannel Authentication) の可...
https://www.slideshare.net/tkudo/openid-connect-ciba-over...
-FAPI (Financial-grade API) and CIBA (Client Initiated Ba...
https://www.slideshare.net/tkudo/fapi-ciba-2019-03-28
***ritou [#f98f2c49]
-OIDC Client Initiated Backchannel Authentication Flow (C...
--概要編~
https://ritou.hatenablog.com/entry/2018/12/29/224452
--詳細もとい感想編~
https://ritou.hatenablog.com/entry/2019/03/04/005238
--CIBAの認証フローを体験するためのWebアプリ(途中経過)~
https://ritou.hatenablog.com/entry/2019/06/03/070000
**OSSコンソーシアム [#j68b8691]
***開発基盤部会 Blog [#m4873357]
-FAPI-CIBAプロファイルを実装してみようかな~
(次いでにOAuth2 Device Flowも)。~
https://www.osscons.jp/jovbqpaa0-537/
-FAPI-CIBA プロファイルの実装を開始した。~
https://www.osscons.jp/jov3wu676-537/
-[[CIBA開発に見た。スタックは出来るがコラボが難しい件のデ...
----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認...
ページ名: