How Passkey Works

Flow

  • Khi đăng nhập lần đầu/ đăng ký:
    • Server hỏi Client có muốn sử dụng passkey cho lần đăng nhập sau không?
    • Yes Client sẽ sử dụng private_key ở máy, sinh ra 1 public_key, sau đó gửi lên server
    • Server lưu trữ thông tin (public key, device id, user_id, …)
    • private_key được lưu ở local
  • Ở lần đăng nhập tiếp theo
    • Server tạo ra 1 login challenge, có dạng như dưới.
    • Client sử dụng private_key để kí vào cái text trong challenge đó, rồi gửi lên server: Chữ kí, credential id (device id), challenge, authenticator data, client data, …
    • Server nhận được chữ kí và thông tin, biết sẽ phải dùng public_key tương ứng nào (liên quan tới current user + device) để verify lại chữ kí.
    • Nếu okie Cho phép đăng nhập.
{
  "challenge": "Y3J5cHRvLWNoYWxsZW5nZS1ieXRlczEyMw==",
  "rpId": "example.com",
  "allowCredentials": [
    {
      "type": "public-key",
      "id": "abcd1234..."
    }
  ],
  "userVerification": "preferred"
}