WebAuthn (Web Authentication API ) 概述

密码强身份验证,防钓鱼(信息跟服务 rp 绑定的)

也在 Credential Management API 扩展了 PublicKeyCredential. 允许用户:
  1. 为网站创建和注册一个 public key
  2. 通過證明擁有相應的私鑰網站進行身份保证

身份驗證器是可以生成私鑰/公鑰對並同意收集的設備。只要符合 FIDO2 要求(FIDO 聯盟認證機構的認證計劃),只需簡單的點擊,成功的指紋讀取或其他方法即可授予簽名同意書。身份驗證器可以內置在平台中(例如智能手機上的指紋掃描儀),也可以通過USB,藍牙低功耗(BLE)或近場通信(NFC)連接。

// challenge:一个用来保证和客户端交互在同一个 session 内对字符串,由服务端生成的随机数据
// relying party: A relying party (RP) is a computer term used to refer to a server providing access to a secure software application.

注册:
应用向 relying party 请求一个 challenge
  1. relying party 生成一个 challenge 并发送给应用 // 防止 "replay attacks"
  2. 应用请求浏览器生成一个密钥对
  3. 浏览器请求身份验证器生成(并保存身份信息)
  4. 身份验证器生成后给浏览器
  5. 浏览器生成最终数据,传递给 relying party
  6. relying party 验证 challenge,origin 后完成注册(保存公钥)



验证:
应用向 relying party 请求一个 challenge
  1. relying party 生成一个 challenge 并发送给应用
  2. 应用请求浏览器取出认证信息
  3. 浏览器请求身份验证器取出
  4. 身份验证器取出后给浏览器
  5. 浏览器生成最终数据,传递 relying party
  6. relying party 验证 challenge,ID,签名信息(经私钥加密,需公钥解密)
密钥是跟 relying party 和 用户指纹相关的。



CTAPClient To Authenticator Protocol
CTAP是W3C WebAuthn API的配套API,主要作用是将浏览器连接至第三方认证系统,比如NFC/USB安全密钥或笔记本电脑/智能手机的底层指纹传感器,以接收证明身份认证的信息。