-
Notifications
You must be signed in to change notification settings - Fork 0
MS_WebAuthenticationAPIOld
- 戻る(Web Authentication API)
- Web Authentication API(旧)
- FIDO認証器
- WebAuthnを実装する。
旧情報 → 新情報
補足(本ページの位置づけ): 本ページは、W3C の Web Authentication が
勧告になる前(2016 年頃)の Edge の ms- プレフィックス実装を扱う。
現在の標準 API はnavigator.credentials.create()/
navigator.credentials.get()であり、
本ページのメソッドはいずれも現存しない。
当時どういう API だったかの記録として残す。
使用する (主な) 関数は 2 つ。
-
makeCredential()メソッド -
getAssertion()メソッド
-
現在はドラフト仕様に基づく ms-prefix 実装であるため、
現在 (2016/05 時点) の Edge の実装では、明示的に下記を使用。window.msCredentials.makeCredentialwindow.msCredentials.getAssertion
-
Polyfill
webauthn.js という Polyfill を使用すると良い。 -
Promise
Promise で実装されている。
(Polyfill・Promise については
JavaScript(DNET_JavaScript.md)を参照)
初回の key pair の作成
- private key の (Device への) 登録
- public key の取得(JWK format)
private key を用いた challenge data のデジタル署名
補足(現在の標準との対応):
本ページ(旧) 現在の標準(WebAuthn) msCredentials.makeCredential()navigator.credentials.create({publicKey: ...})msCredentials.getAssertion()navigator.credentials.get({publicKey: ...})公開鍵を JWK で受け取る COSE_Key 形式(CBOR)で受け取る 「登録(鍵ペアの作成)」と「認証(チャレンジへの署名)」という
2 段構えの考え方は変わっていない。
-
(現時点で)以下に値が入ってこない。
result.algorithmresult.attestation
-
PKI のキーペアは、CredentialID を使用して、紐付けを行う模様。
-
このキーペアは、AIK(認証IDキー)だと思われる。
-
従って、CredentialID には、認証器が生成した値を使用する必要がある。
-
なので、実装に注意が必要(あるサンプルコードは失敗する)。
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/issues/50#issuecomment-336858649 -
なお、CredentialID を使用すれば、複数のデバイスの登録が可能。
しかし、デバイスを特定する方法が無いので、登録が重複してしまう。
-
補足(CredentialID は認証器が決める): 「認証器が生成した値を使う必要がある」という
著者の指摘は、現在の WebAuthn でもそのまま通用する。
credentialIdは認証器が返す不透明なバイト列であり、
サーバ側が採番した ID を代わりに使うと、
認証時に認証器が鍵を見つけられず失敗する。
なお「デバイスを特定する方法が無い」問題は、現在は
AAGUID(認証器モデルの識別子)と
ユーザ入力の「鍵の呼び名」で運用上カバーするのが一般的である。
-
Windows Hello を Web で使うための Web Authentication API (FIDO 2.0) について調べた
http://blog.shibayan.jp/entry/20170129/1485665985 -
ASP.NET Core Identity に Windows Hello を使ったログイン機能を追加する
http://blog.shibayan.jp/entry/20170131/1485844075- shibayan/webauthn-aspnet-demo: Demo Application for Windows Hello (Web Authn API)
https://github.com/shibayan/webauthn-aspnet-demo
- shibayan/webauthn-aspnet-demo: Demo Application for Windows Hello (Web Authn API)
-
Manage/AddPublicKey.cshtml
https://github.com/shibayan/webauthn-aspnet-demo/blob/master/src/WebAuthnDemo/Views/Manage/AddPublicKey.cshtml -
Account/Login.cshtml
https://github.com/shibayan/webauthn-aspnet-demo/blob/master/src/WebAuthnDemo/Views/Account/Login.cshtml
-
AccountController.cs
https://github.com/shibayan/webauthn-aspnet-demo/blob/master/src/WebAuthnDemo/Controllers/AccountController.cs#L149 -
ManageController.cs
https://github.com/shibayan/webauthn-aspnet-demo/blob/master/src/WebAuthnDemo/Controllers/ManageController.cs#L127
- FidoAuthenticator.cs
https://github.com/shibayan/webauthn-aspnet-demo/blob/master/src/WebAuthnDemo/Services/FidoAuthenticator.cs
-
Web Authentication API 紹介 (Windows Hello を使った Edge 開発) – Tsmatz
https://blogs.msdn.microsoft.com/tsmatsuz/2016/06/08/w3c-web-authentication-api-javascript/ -
Dev guide: Web authentication - Microsoft Edge Development
https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/dev-guide/device/web-authentication/ -
A world without passwords: Windows Hello in Microsoft Edge - Microsoft Edge Dev Blog
https://blogs.windows.com/msedgedev/2016/04/12/a-world-without-passwords-windows-hello-in-microsoft-edge/
- Web Authentication
https://msdn.microsoft.com/en-us/library/mt697638.aspx- MSCredentials object
https://msdn.microsoft.com/en-us/library/mt697639.aspx- makeCredential method
https://msdn.microsoft.com/en-us/library/mt697641.aspx - getAssertion method
https://msdn.microsoft.com/en-us/library/mt697640.aspx
- makeCredential method
- MSCredentials object
- polyfill
- csharp/app.cs
https://github.com/adrianba/fido-snippets/blob/master/csharp/app.cs
- まだパスワードで消耗してるの? TouchIDとFIDO2.0でパスワードレス認証を実装してみた(Keycloak編)
https://qiita.com/rkato/items/3607e6870c71fbd3ec06
https://opentouryo.osscons.jp/index.php?FIDO2.0%E5%AF%BE%E5%BF%9C
Tags: 認証基盤
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。