Dữ liệu thiết bị xác thực
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Khi một thiết bị xác thực (authenticator) thực hiện đăng ký hoặc xác thực, nó trả về một cấu trúc dữ liệu gọi là dữ liệu thiết bị xác thực (authenticator data). Trang này mô tả cấu trúc này.
Cấu trúc dữ liệu thiết bị xác thực
Dữ liệu thiết bị xác thực là mảng byte có cấu trúc sau:
| Byte offset | Độ dài | Tên | Mô tả |
|---|---|---|---|
| 0 | 32 | rpIdHash | Hash SHA-256 của RP ID |
| 32 | 1 | flags | Các cờ bit |
| 33 | 4 | signCount | Bộ đếm chữ ký (big-endian uint32) |
| 37 | biến | attestedCredentialData | Dữ liệu thông tin xác thực được chứng thực (chỉ hiện diện trong phản hồi đăng ký) |
| biến | biến | extensions | Các phần mở rộng CBOR (tùy chọn) |
rpIdHash
32 byte đầu là hash SHA-256 của RP ID. RP ID thường là tên miền của trang web.
Cờ flags
Byte thứ 33 chứa nhiều cờ bit:
| Bit | Tên | Mô tả |
|---|---|---|
| 0 | UP (User Presence) | Người dùng hiện diện |
| 2 | UV (User Verification) | Người dùng được xác minh |
| 3 | BE (Backup Eligibility) | Đủ điều kiện sao lưu |
| 4 | BS (Backup State) | Trạng thái sao lưu |
| 6 | AT (Attested Credential Data included) | Dữ liệu thông tin xác thực được đính kèm |
| 7 | ED (Extension Data included) | Dữ liệu phần mở rộng được đính kèm |
signCount
Bộ đếm chữ ký là số nguyên 32-bit big-endian tăng dần cho mỗi thao tác xác thực. Máy chủ có thể dùng này để phát hiện các thiết bị bị sao chép.
attestedCredentialData
Cấu trúc này chỉ có trong phản hồi đăng ký và chứa:
| Trường | Độ dài | Mô tả |
|---|---|---|
| aaguid | 16 byte | GUID định danh kiểu thiết bị xác thực |
| credentialIdLength | 2 byte | Độ dài của ID thông tin xác thực |
| credentialId | biến | ID thông tin xác thực duy nhất |
| credentialPublicKey | biến | Khóa công khai được mã hóa CBOR |
Đọc dữ liệu thiết bị xác thực
Dữ liệu thiết bị xác thực có trong phản hồi từ thiết bị:
const credential = await navigator.credentials.create({ publicKey: options });
// Lấy phản hồi xác thực
const attestationResponse = credential.response;
// Dữ liệu thiết bị xác thực có sẵn tại:
const authenticatorData = attestationResponse.getAuthenticatorData();
// hoặc
const rawAuthenticatorData = attestationResponse.authenticatorData;
Xác minh phía máy chủ
Sau khi nhận dữ liệu thiết bị xác thực, máy chủ cần xác minh:
- rpIdHash khớp với hash SHA-256 của RP ID dự kiến.
- Cờ UP (User Presence) được đặt.
- Cờ UV (User Verification) được đặt (nếu yêu cầu).
- signCount lớn hơn giá trị đã lưu (để phát hiện replay).