Hướng dẫn về khoá truy cập

Tính năng web: Xác thực web

Hướng dẫn này cung cấp thông tin định hướng chuyên sâu, tập trung vào hành động để triển khai quy trình xác thực khoá truy cập và quản lý thông tin xác thực an toàn, không phụ thuộc vào khung trong các ứng dụng web hiện đại.

1. Điều kiện tiên quyết cốt lõi đối với khoá truy cập

Khoá truy cập dựa vào API Xác thực web (WebAuthn), áp dụng các quy tắc ràng buộc bảo mật nghiêm ngặt cần được đáp ứng trước khi triển khai:

  • Bối cảnh bảo mật: Các phương thức WebAuthn (navigator.credentials.create và navigator.credentials.get) được kiểm soát chặt chẽ trong Bối cảnh bảo mật. Ứng dụng PHẢI chạy trên https:// trong môi trường thực tế hoặc http://localhost cho quá trình phát triển cục bộ.
  • Mã nhận dạng bên tin cậy (RP): Mỗi thông tin xác thực đều được liên kết với một mã nhận dạng RP (về cơ bản là tên miền của ứng dụng). Mã RP được truyền trong các tuỳ chọn phía máy chủ PHẢI khớp hoặc là hậu tố hợp lệ của tên miền của nguồn gốc hiện tại (ví dụ: example.com hợp lệ cho login.example.com). Việc không khớp sẽ dẫn đến ngoại lệ SecurityError ở phía máy khách.

2. Cảnh báo về trải nghiệm người dùng liên quan đến AAGUID

Mã nhận dạng riêng biệt trên toàn cầu của chứng thực trình xác thực (AAGUID) là một giá trị nhận dạng riêng biệt 128 bit được trả về trong dữ liệu chứng thực đăng ký, đại diện cho mẫu/nhà cung cấp của trình xác thực (ví dụ: Trình quản lý mật khẩu của Google, Chuỗi khoá iCloud, 1Password).

  • Chỉ gợi ý về trải nghiệm người dùng: Bên phụ thuộc PHẢI sử dụng AAGUID chỉ cho các gợi ý về trải nghiệm người dùng (chẳng hạn như hiển thị tên và biểu tượng của nhà cung cấp khoá truy cập trong danh sách quản lý để giúp người dùng).
  • Không có phần phụ thuộc bảo mật: ứng dụng KHÔNG ĐƯỢC sử dụng AAGUID cho các quyết định về quyền truy cập hoặc bảo mật bằng mật mã. Khoá truy cập nền tảng hiện không cung cấp chứng thực mật mã cho AAGUID, nghĩa là tác nhân người dùng có thể thay đổi hoặc mô phỏng khoá truy cập nền tảng.

3. Đề xuất thư viện tách biệt

Để tạo các tuỳ chọn FIDO2/WebAuthn phụ trợ và xác minh chữ ký, nhà phát triển PHẢI dựa vào các thư viện nguồn mở đã được kiểm tra theo từng ngôn ngữ thay vì tự triển khai mật mã:

  • JavaScript/TypeScript: SimpleWebAuthn (github.com/MasterKale/SimpleWebAuthn)
  • Python: py_webauthn (github.com/duo-labs/py_webauthn)
  • Java: Java WebAuthn Server (github.com/Yubico/java-webauthn-server), WebAuthn4J (github.com/webauthn4j/webauthn4j)
  • .NET: Thư viện .NET cho FIDO2 (github.com/abergs/fido2-net-lib)
  • Go: Thư viện WebAuthn Go (github.com/go-webauthn/webauthn)
  • Ruby: WebAuthn Ruby (github.com/cedarcode/webauthn-ruby)
  • PHP: WebAuthn Framework (github.com/web-auth/webauthn-framework)

4. Ma trận tham chiếu trường hợp sử dụng

Xác định trường hợp sử dụng phù hợp bên dưới và xem hướng dẫn triển khai đầy đủ. Mỗi trường hợp sử dụng đều có các API quan trọng (PublicKeyCredential.parseCreationOptionsFromJSON, parseRequestOptionsFromJSON, signalAllAcceptedCredentials, signalCurrentUserDetails, signalUnknownCredential, dàn xếp có điều kiện, xử lý AAGUID, v.v.) chỉ được ghi lại trong hướng dẫn theo từng trường hợp sử dụng. KHÔNG bỏ qua bước truy xuất này và KHÔNG thay thế trình bao bọc thư viện của bên thứ ba (chẳng hạn như startAuthentication/startRegistration của SimpleWebAuthn) trên ứng dụng khách – hãy gọi trực tiếp các API trình duyệt WebAuthn gốc. Các đề xuất về thư viện trong Mục 3 chỉ áp dụng cho phía máy chủ (xác minh FIDO2 phụ trợ).

Thông tin chi tiết cụ thể về cách triển khai khoá truy cập và WebAuthn được liên kết với các hướng dẫn sau: