「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
以下に、各種、調査結果をサマリーする。
# | パラメタ | 必須 / 任意 | 説明 | フォーマット | |
1 | rp | 必須 | Relying partyに関する情報 | JSON Object (下記メンバを持つ) | |
1-1 | ・ | id | FQDN名 | String | |
1-2 | ・ | name | 任意のRPサイト名 | String | |
2 | user | 必須 | Credentialが紐づくユーザー情報 | JSON Object (下記メンバを持つ) | |
2-1 | ・ | id | RP上のユーザID | ArrayBuffer? | |
2-2 | ・ | name | RP上のユーザID | String | |
2-3 | ・ | displayName | RP上のユーザ表示名 | String | |
3 | challenge | 必須 | サーバーで生成した乱数 | ArrayBuffer? | |
4 | pubKeyCredParams? | 必須 | Credential情報 | JSON Objectの配列 | |
4-1 | ・ | type | タイプ(public-key固定) | String | |
4-2 | ・ | alg | アルゴリズムを表す数値 | Int | |
5 | timeout | 任意 | ユーザーの入力待機時間 | Int | |
6 | attestation | 任意 | Authenticator自体の検証 | JSON Object (AttestationConveyancePreference?) | |
7 | authenticatorSelection | 任意 | 認証器への要求事項 | JSON Object (AuthenticatorSelectionCriteria?) | |
8 | excludeCredentials | 任意 | JSON Object (PublicKeyCredentialDescriptor?) |
# | パラメタ | 説明 | フォーマット | ||||
1 | id | 割り当てられたid | rawIdの文字列表現 | ||||
2 | rawId | idのArrayBuffer?版 | ArrayBuffer? | ||||
3 | ・ | response | AuthenticatorAttestationResponse? | JSON Object (AuthenticatorAttestationResponse?) | |||
3-1 | ・ | attestationObject | 公開鍵などを含む | CBOR形式 | |||
3-1-1 | ・ | fmt | Attestation format | "fmt": "packed" | |||
3-1-2 | ・ | authData | Raw buffer struct containing user info | "authData": "..." | |||
3-1-3 | ・ | attStmt | Attestation statement data | "attStmt": { | |||
3-1-3-1 | ・ | sig | Signature | "sig": "..." | |||
3-1-3-2 | ・ | x5c" | X.509 Certificate Chain | "x5c": ["..."] | |||
3-2 | ・ | clientDataJSON | クライアント・データ | CBOR形式 | |||
3-2-1 | ・ | challenge | Random number | "challenge": "..." | |||
3-2-2 | ・ | origin | Origin of the website | "origin": "http(s)://..." | |||
3-2-3 | ・ | type | Type of the call | "type": "webauthn.create" | |||
4 | type | pubKeyCredParams? - typeと同じ | "type": "public-key" |
COSEから公開鍵を取り出して、保存する。
# | パラメタ | 必須 / 任意 | 説明 | フォーマット |
1 | challenge | 必須 | サーバーで生成した乱数 | ArrayBuffer? |
2 | timeout | 任意 | ユーザーの入力待機時間 | Int |
3 | rpId | 任意 | rpIdの指定(登録時と同じ値を指定) | String |
4 | allowCredentials | 任意 | ユーザに紐づくCredentialのリスト | Array (PublicKeyCredentialDescriptor?) |
5 | userVerification | 任意 | ユーザ検証に関する要件 | String (enum UserVerificationRequirement?) |
# | パラメタ | 説明 | フォーマット | |
1 | id | 割り当てられたid | rawIdの文字列表現 | |
2 | rawId | idのArrayBuffer?版 | ArrayBuffer? | |
3 | response | assertion data | JSON Object (AuthenticatorAssertionResponse?) | |
3-1 | ・ | authenticatorData | ArrayBuffer? | |
3-2 | ・ | clientDataJSON | ArrayBuffer? | |
3-3 | ・ | signature | ArrayBuffer? | |
3-4 | ・ | userHandle | ArrayBuffer? | |
4 | type | タイプ(public-key固定) | String | |
5 | getClientExtensionResults? | extensions results struct |
OIDCのSTS/IdP(OP)、Client(RP)のどちらでもWebAuthn?のRelying Party(RP)になれる。
IdPに集約可能で楽。
折衷案
IdPのコントロールが効かない場合。
FIDO2サーバ標準は存在しないが、FIDO2適合テストツールで使用する提案されたI/Fは存在する。
https://gist.github.com/daisukenishino2/f09fb400fa2186aead4b6f8cad59ab38#gistcomment-2852202