Đăng nhập bằng khoá truy cập thông qua tính năng tự động điền biểu mẫu

Tạo một trải nghiệm đăng nhập tận dụng khoá truy cập mà vẫn đáp ứng nhu cầu của người dùng mật khẩu hiện tại.

Hướng dẫn này giải thích cách sử dụng tính năng tự động điền biểu mẫu để cho phép người dùng đăng nhập bằng khoá truy cập cùng với mật khẩu. Việc sử dụng tính năng tự động điền biểu mẫu sẽ tạo ra trải nghiệm đăng nhập hợp nhất, đơn giản hoá quá trình chuyển đổi từ mật khẩu sang phương thức xác thực bằng khoá truy cập an toàn và thân thiện với người dùng hơn.

Tìm hiểu cách triển khai giao diện người dùng có điều kiện của WebAuthn để hỗ trợ cả người dùng khoá truy cập và mật khẩu với mức độ phiền toái tối thiểu trong các biểu mẫu đăng nhập hiện có của bạn.

Tại sao nên sử dụng tính năng tự động điền biểu mẫu để đăng nhập bằng khoá truy cập?

Khoá truy cập cho phép người dùng đăng nhập vào các trang web bằng vân tay, khuôn mặt hoặc mã PIN của thiết bị.

Nếu tất cả người dùng đều có khoá truy cập, thì quy trình xác thực có thể chỉ là một nút đăng nhập một lần. Khi nhấn vào nút này, người dùng có thể xác minh trực tiếp tài khoản bằng phương thức khoá màn hình và đăng nhập.

Tuy nhiên, việc chuyển từ mật khẩu sang khoá truy cập cũng gặp phải một số thách thức. Trong khoảng thời gian này, các trang web cần hỗ trợ cả người dùng mật khẩu và khoá truy cập. Việc yêu cầu người dùng nhớ những trang web sử dụng khoá truy cập và yêu cầu họ chọn phương thức đăng nhập ngay từ đầu sẽ tạo ra trải nghiệm người dùng kém.

Khoá truy cập cũng là một công nghệ mới và việc giải thích rõ ràng về khoá truy cập có thể gặp khó khăn. Việc sử dụng giao diện tự động điền quen thuộc giúp giải quyết cả thách thức chuyển đổi và nhu cầu quen thuộc của người dùng.

Sử dụng giao diện người dùng có điều kiện

Để hỗ trợ hiệu quả cả người dùng khoá truy cập và mật khẩu, hãy thêm khoá truy cập vào các đề xuất tự động điền của biểu mẫu. Phương pháp này sử dụng giao diện người dùng có điều kiện, một tính năng của tiêu chuẩn WebAuthn.

Ví dụ về việc chọn khoá truy cập thông qua tính năng tự động điền biểu mẫu.

Khi người dùng tập trung vào trường nhập tên người dùng, một hộp thoại tự động điền sẽ xuất hiện, đề xuất các khoá truy cập đã lưu cùng với mật khẩu đã lưu. Người dùng có thể chọn khoá truy cập hoặc mật khẩu và tiếp tục đăng nhập bằng phương thức khoá màn hình của thiết bị nếu họ chọn khoá truy cập.

Điều này cho phép người dùng đăng nhập vào trang web của bạn bằng biểu mẫu đăng nhập hiện có, nhưng có thêm lợi ích bảo mật của khoá truy cập nếu họ có khoá truy cập.

Cách hoạt động của quy trình xác thực bằng khoá truy cập

Để xác thực bằng khoá truy cập, bạn sử dụng WebAuthn API.

Quy trình xác thực bằng khoá truy cập có 4 thành phần:

  • Phụ trợ: Lưu trữ thông tin chi tiết về tài khoản người dùng, bao gồm cả khoá công khai.
  • Giao diện người dùng: Giao tiếp với trình duyệt và tìm nạp dữ liệu cần thiết từ phần phụ trợ.
  • Trình duyệt: Chạy JavaScript và tương tác với WebAuthn API.
  • Nhà cung cấp khoá truy cập: Tạo và lưu trữ khoá truy cập. Đây thường là một trình quản lý mật khẩu như Trình quản lý mật khẩu của Google hoặc một khoá bảo mật.
Quy trình xác thực bằng khoá truy cập, cho thấy sự tương tác giữa giao diện người dùng, phần phụ trợ, trình duyệt và nhà cung cấp khoá truy cập.
Quy trình xác thực đầy đủ bằng khoá truy cập.

Quy trình xác thực bằng khoá truy cập diễn ra theo quy trình sau:

  1. Người dùng truy cập vào trang đăng nhập và giao diện người dùng yêu cầu một thử thách xác thực từ phần phụ trợ.
  2. Phần phụ trợ tạo và trả về một thử thách WebAuthn được liên kết với tài khoản của người dùng.
  3. Giao diện người dùng gọi navigator.credentials.get() bằng thử thách để bắt đầu xác thực bằng trình duyệt.
  4. Trình duyệt, tương tác với nhà cung cấp khoá truy cập, nhắc người dùng chọn một khoá truy cập (thường sử dụng hộp thoại tự động điền do việc tập trung vào trường đăng nhập kích hoạt) và xác minh danh tính của họ bằng khoá màn hình thiết bị hoặc dữ liệu sinh trắc học.
  5. Sau khi xác minh người dùng thành công, trình cung cấp khoá truy cập sẽ ký vào thử thách và trình duyệt sẽ trả về thông tin xác thực khoá công khai thu được (bao gồm cả chữ ký) cho giao diện người dùng.
  6. Giao diện người dùng sẽ gửi thông tin đăng nhập này đến phần phụ trợ.
  7. Phần phụ trợ xác minh chữ ký của thông tin đăng nhập dựa trên khoá công khai đã lưu trữ của người dùng. Nếu xác minh thành công, phần phụ trợ sẽ đăng nhập cho người dùng.

Xác thực bằng khoá truy cập thông qua tính năng tự động điền biểu mẫu

Để bắt đầu xác thực bằng khoá truy cập bằng tính năng tự động điền biểu mẫu, hãy thực hiện một lệnh gọi WebAuthn get có điều kiện khi trang đăng nhập tải. Lệnh gọi này đến navigator.credentials.get() bao gồm lựa chọn mediation: 'conditional'.
Yêu cầu có điều kiện đối với API navigator.credentials.get() của WebAuthn không hiển thị giao diện người dùng ngay lập tức. Thay vào đó, nó sẽ chờ ở trạng thái đang chờ xử lý cho đến khi người dùng tương tác với lời nhắc điền tự động của trường tên người dùng. Nếu người dùng chọn một khoá truy cập, trình duyệt sẽ giải quyết lời hứa đang chờ xử lý bằng một thông tin xác thực để đăng nhập cho người dùng, bỏ qua quy trình gửi biểu mẫu truyền thống. Nếu người dùng chọn mật khẩu, thì lời hứa sẽ không được thực hiện và quy trình đăng nhập bằng mật khẩu tiêu chuẩn sẽ tiếp tục. Sau đó, trang có trách nhiệm đăng nhập cho người dùng.

Chú thích trường nhập dữ liệu trên biểu mẫu

Để bật tính năng tự động điền khoá truy cập, hãy thêm thuộc tính autocomplete vào trường tên người dùng input của biểu mẫu. Bao gồm cả usernamewebauthn dưới dạng các giá trị được phân tách bằng dấu cách.

<input type="text" name="username" autocomplete="username webauthn" autofocus>

Việc thêm autofocus vào trường này sẽ tự động kích hoạt lời nhắc tự động điền khi tải trang, cho thấy ngay các mật khẩu và khoá truy cập hiện có.

Phát hiện đối tượng

Trước khi gọi một lệnh gọi API WebAuthn có điều kiện, hãy kiểm tra xem:

  • Trình duyệt hỗ trợ WebAuthn bằng PublicKeyCredential.

Browser Support

  • Chrome: 67.
  • Edge: 18.
  • Firefox: 60.
  • Safari: 13.

Source

  • Trình duyệt hỗ trợ tính năng phát hiện khả năng bằng PublicKeyCredential.getClientCapabilities().

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

Đoạn mã sau đây cho biết cách bạn có thể kiểm tra xem trình duyệt có hỗ trợ các tính năng này hay không:

if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  // Check if conditional mediation is available.  
  if (capabilities.conditionalGet === true) {
    // The browser supports conditional mediation.
  }
}

Tìm nạp thông tin từ phần phụ trợ

Phần phụ trợ của bạn cần cung cấp một số lựa chọn cho phần giao diện người dùng để bắt đầu cuộc gọi navigator.credentials.get(). Các lựa chọn này thường được tìm nạp dưới dạng đối tượng JSON từ một điểm cuối trên máy chủ của bạn.

Các thuộc tính chính trong đối tượng options bao gồm:

  • challenge: Thử thách do máy chủ tạo trong ArrayBuffer (thường được mã hoá Base64URL để truyền JSON). Điều này là cần thiết để ngăn chặn các cuộc tấn công phát lại. Máy chủ của bạn phải tạo một thử thách mới cho mỗi lần đăng nhập và nên vô hiệu hoá thử thách đó sau một thời gian ngắn hoặc nếu một lần đăng nhập không thành công.
  • allowCredentials: Một mảng gồm các giá trị mô tả thông tin đăng nhập. Truyền một mảng trống. Thao tác này sẽ nhắc trình duyệt liệt kê tất cả thông tin đăng nhập cho rpId đã chỉ định.
  • userVerification: Chỉ định lựa chọn ưu tiên của bạn về việc xác minh người dùng, chẳng hạn như yêu cầu phương thức khoá màn hình của thiết bị. Giá trị mặc định và nên dùng là "preferred". Các giá trị có thể là:

    • "required": Trình xác thực phải thực hiện quy trình xác minh người dùng (chẳng hạn như mã PIN hoặc dữ liệu sinh trắc học). Thao tác sẽ không thành công nếu không thể thực hiện quy trình xác minh.
    • "preferred": Trình xác thực cố gắng xác minh người dùng, nhưng thao tác có thể thành công mà không cần xác minh.
    • "discouraged": Trình xác thực nên tránh xác minh người dùng nếu có thể.
  • rpId: Mã nhận dạng bên đáng tin cậy, thường là miền của trang web (chẳng hạn như example.com). Giá trị này phải khớp chính xác với rp.id được dùng khi tạo thông tin đăng nhập bằng khoá truy cập.

Máy chủ của bạn phải tạo đối tượng lựa chọn này. Các giá trị ArrayBuffer (chẳng hạn như challenge) phải được mã hoá Base64URL để truyền JSON. Ở giao diện người dùng, sau khi phân tích cú pháp JSON, hãy dùng PublicKeyCredential.parseRequestOptionsFromJSON() để chuyển đổi đối tượng (bao gồm cả việc giải mã các chuỗi Base64URL) thành định dạng mà navigator.credentials.get() mong đợi.

Đoạn mã sau đây cho biết cách bạn có thể tìm nạp và giải mã thông tin cần thiết để xác thực bằng khoá truy cập.

// Fetch an encoded PubicKeyCredentialRequestOptions from the server.
const _options = await fetch('/webauthn/signinRequest');

// Deserialize and decode the PublicKeyCredentialRequestOptions.
const decoded_options = JSON.parse(_options);
const options = PublicKeyCredential.parseRequestOptionsFromJSON(decoded_options);
...

Gọi WebAuthn API bằng cờ conditional để xác thực người dùng

Sau khi bạn chuẩn bị đối tượng publicKeyCredentialRequestOptions (được gọi là options trong mã ví dụ bên dưới), hãy gọi navigator.credentials.get() để bắt đầu quy trình xác thực khoá truy cập có điều kiện.

// To abort a WebAuthn call, instantiate an AbortController.
const abortController = new AbortController();

// Invoke WebAuthn to authenticate with a passkey.
const credential = await navigator.credentials.get({
  publicKey: options,
  signal: abortController.signal,
  // Specify 'conditional' to activate conditional UI
  mediation: 'conditional'
});

Các tham số chính cho lệnh gọi này:

  • publicKey: Đây phải là đối tượng publicKeyCredentialRequestOptions (có tên là options trong ví dụ) mà bạn đã tìm nạp từ máy chủ và xử lý trong bước trước.
  • signal: Truyền tín hiệu của AbortController (chẳng hạn như abortController.signal) cho phép bạn huỷ yêu cầu get() theo cách có lập trình. Điều này hữu ích khi bạn muốn gọi một WebAuthn khác.
  • mediation: 'conditional': Đây là cờ quan trọng giúp cuộc gọi WebAuthn có điều kiện. Thao tác này yêu cầu trình duyệt đợi người dùng tương tác với lời nhắc tự động điền thay vì ngay lập tức hiển thị hộp thoại phương thức.

Gửi thông tin xác thực khoá công khai đã trả về đến máy chủ RP

Nếu người dùng chọn một khoá truy cập và xác minh thành công danh tính của họ (ví dụ: sử dụng phương thức khoá màn hình của thiết bị), thì lời hứa navigator.credentials.get() sẽ được thực hiện. Thao tác này sẽ trả về một đối tượng PublicKeyCredential cho giao diện người dùng.

Promise có thể bị từ chối vì một số lý do. Bạn nên xử lý những lỗi này trong mã bằng cách kiểm tra thuộc tính name của đối tượng Error:

  • NotAllowedError: Người dùng đã huỷ thao tác hoặc không chọn khoá truy cập nào.
  • AbortError: Thao tác đã bị huỷ bỏ, có thể là do mã của bạn sử dụng AbortController.
  • Các trường hợp ngoại lệ khác: Đã xảy ra lỗi không mong muốn. Thông thường, trình duyệt sẽ cho người dùng thấy một hộp thoại lỗi.

Đối tượng PublicKeyCredential chứa một số thuộc tính. Các thuộc tính chính liên quan đến việc xác thực bao gồm:

  • id: Mã nhận dạng được mã hoá base64url của thông tin đăng nhập bằng khoá truy cập đã được xác thực.
  • rawId: Một phiên bản ArrayBuffer của mã nhận dạng thông tin đăng nhập.
  • response.clientDataJSON: Một ArrayBuffer gồm dữ liệu khách hàng. Trường này chứa thông tin, chẳng hạn như thử thách và nguồn gốc mà máy chủ của bạn phải xác minh.
  • response.authenticatorData: Một ArrayBuffer của dữ liệu trình xác thực. Trường này chứa thông tin như mã nhận dạng RP.
  • response.signature: Một ArrayBuffer chứa chữ ký. Giá trị này là cốt lõi của thông tin đăng nhập và máy chủ của bạn phải xác minh chữ ký này bằng khoá công khai đã lưu trữ cho thông tin đăng nhập .
  • response.userHandle: ArrayBuffer chứa mã nhận dạng người dùng được cung cấp trong quá trình đăng ký khoá truy cập.
  • authenticatorAttachment: Cho biết liệu trình xác thực có phải là một phần của thiết bị khách (platform) hay thiết bị bên ngoài (cross-platform). Thiết bị đính kèm cross-platform có thể xuất hiện nếu người dùng đăng nhập bằng điện thoại. Trong những trường hợp như vậy, hãy cân nhắc nhắc người dùng tạo khoá truy cập trên thiết bị hiện tại để thuận tiện hơn trong tương lai.
  • type: Trường này luôn được đặt thành "public-key".

Để gửi đối tượng PublicKeyCredential này đến phần phụ trợ, trước tiên, hãy gọi phương thức .toJSON(). Phương thức này tạo ra một phiên bản có thể chuyển đổi tuần tự JSON của thông tin đăng nhập, giúp xử lý chính xác việc chuyển đổi các thuộc tính ArrayBuffer (chẳng hạn như rawId, clientDataJSON, authenticatorData, signatureuserHandle) thành các chuỗi được mã hoá Base64URL. Sau đó, hãy dùng JSON.stringify() để chuyển đổi đối tượng này thành một chuỗi và gửi chuỗi đó trong nội dung yêu cầu đến máy chủ.

...
// Encode and serialize the PublicKeyCredential.
const _result = credential.toJSON();
const result = JSON.stringify(_result);

// Encode and send the credential to the server for verification.  
const response = await fetch('/webauthn/signinResponse', {
  method: 'post',
  credentials: 'same-origin',
  body: result
});

Xác minh chữ ký

Khi nhận được thông tin đăng nhập bằng khoá công khai, máy chủ phụ trợ của bạn phải xác minh tính xác thực của thông tin đăng nhập đó. Việc này bao gồm:

  1. Phân tích cú pháp dữ liệu thông tin xác thực.
  2. Tra cứu khoá công khai đã lưu trữ được liên kết với id của thông tin đăng nhập.
  3. Xác minh signature đã nhận được dựa trên khoá công khai đã lưu trữ.
  4. Xác thực dữ liệu khác, chẳng hạn như thử thách và nguồn gốc.

Bạn nên dùng thư viện FIDO/WebAuthn phía máy chủ để xử lý an toàn các thao tác mã hoá này. Bạn có thể tìm thấy các thư viện nguồn mở trong kho lưu trữ awesome-webauthn trên GitHub.

Nếu chữ ký và tất cả các câu khẳng định khác đều hợp lệ, thì máy chủ có thể đăng nhập cho người dùng. Để biết các bước xác thực phía máy chủ chi tiết, hãy xem phần Xác thực bằng khoá truy cập phía máy chủ

Đưa ra tín hiệu nếu không tìm thấy thông tin đăng nhập khớp trên máy chủ phụ trợ

Nếu máy chủ phụ trợ của bạn không tìm thấy thông tin đăng nhập có mã nhận dạng để so khớp trong quá trình đăng nhập, thì có thể trước đó người dùng đã xoá khoá truy cập này khỏi máy chủ của bạn nhưng chưa xoá khỏi nhà cung cấp khoá truy cập của họ. Sự không khớp này có thể dẫn đến trải nghiệm khó hiểu cho người dùng nếu nhà cung cấp khoá truy cập tiếp tục đề xuất một khoá truy cập không còn hoạt động với trang web của bạn. Để cải thiện điều này, bạn nên báo hiệu cho nhà cung cấp khoá truy cập để xoá khoá truy cập không liên kết.

Bạn có thể sử dụng phương thức PublicKeyCredential.signalUnknownCredential() (một phần của Webauthn Signal API) để thông báo cho nhà cung cấp khoá truy cập rằng thông tin xác thực được chỉ định đã bị xoá hoặc không tồn tại. Gọi phương thức tĩnh này ở phía máy khách nếu máy chủ của bạn cho biết (ví dụ: bằng một Mã trạng thái HTTP cụ thể như 404) rằng không xác định được một mã thông tin đăng nhập đã trình bày. Cung cấp mã nhận dạng RP và mã nhận dạng thông tin đăng nhập không xác định cho phương thức này. Nếu hỗ trợ tín hiệu này, nhà cung cấp khoá truy cập nên xoá khoá truy cập.

// Detect authentication failure due to lack of the credential
if (response.status === 404) {
  // Feature detection
  if (PublicKeyCredential.signalUnknownCredential) {
    await PublicKeyCredential.signalUnknownCredential({
      rpId: "example.com",
      credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
    });
  } else {
    // Encourage the user to delete the passkey from the password manager nevertheless.
    ...
  }
}

Sau khi xác thực

Tuỳ thuộc vào cách người dùng đăng nhập, chúng tôi đề xuất các quy trình khác nhau để thực hiện.

Nếu người dùng đã đăng nhập mà không có khoá truy cập

Nếu người dùng đã đăng nhập vào trang web của bạn mà không có khoá truy cập, thì có thể họ chưa đăng ký khoá truy cập cho tài khoản đó hoặc trên thiết bị hiện tại của họ. Đây là thời điểm thích hợp để khuyến khích người dùng tạo khoá truy cập. Hãy cân nhắc các phương pháp sau:

  • Nâng cấp mật khẩu lên khoá truy cập: Sử dụng conditional create (tạo có điều kiện), một tính năng WebAuthn cho phép trình duyệt tự động tạo khoá truy cập cho người dùng sau khi đăng nhập thành công bằng mật khẩu. Điều này có thể cải thiện đáng kể việc sử dụng khoá truy cập bằng cách đơn giản hoá quy trình tạo. Tìm hiểu cách hoạt động và cách triển khai tại phần Giúp người dùng sử dụng khoá truy cập một cách liền mạch hơn
  • Nhắc người dùng tạo khoá truy cập theo cách thủ công: Khuyến khích người dùng tạo khoá truy cập. Điều này có thể hiệu quả sau khi người dùng hoàn tất một quy trình đăng nhập phức tạp hơn, chẳng hạn như xác thực đa yếu tố (MFA). Tuy nhiên, hãy tránh đưa ra quá nhiều lời nhắc vì điều này có thể gây phiền toái cho trải nghiệm người dùng."

Để biết cách khuyến khích người dùng tạo khoá truy cập và tìm hiểu các phương pháp hay khác, hãy xem ví dụ về Truyền đạt thông tin về khoá truy cập cho người dùng.

Nếu người dùng đã đăng nhập bằng khoá truy cập

Sau khi người dùng đăng nhập thành công bằng khoá truy cập, bạn có một số cơ hội để nâng cao hơn nữa trải nghiệm của họ và duy trì tính nhất quán của tài khoản.

Khuyến khích tạo khoá truy cập mới sau khi xác thực trên nhiều thiết bị

Nếu người dùng đăng nhập bằng khoá truy cập thông qua một cơ chế trên nhiều thiết bị (ví dụ: quét mã QR bằng điện thoại), thì khoá truy cập mà họ đã dùng có thể không được lưu trữ cục bộ trên thiết bị mà họ đang đăng nhập. Điều này có thể xảy ra khi:

  • Họ có khoá truy cập nhưng trên một nhà cung cấp khoá truy cập không hỗ trợ hệ điều hành hoặc trình duyệt đăng nhập.
  • Họ đã mất quyền truy cập vào trình cung cấp khoá truy cập trên thiết bị đăng nhập, nhưng vẫn có khoá truy cập trên một thiết bị khác.

Trong trường hợp này, hãy cân nhắc việc nhắc người dùng tạo khoá truy cập mới trên thiết bị hiện tại. Nhờ đó, họ không cần phải lặp lại quy trình đăng nhập trên nhiều thiết bị trong tương lai. Để xác định xem người dùng đã đăng nhập bằng khoá truy cập trên nhiều thiết bị hay chưa, hãy kiểm tra thuộc tính authenticatorAttachment của thông tin xác thực. Nếu giá trị là "cross-platform", thì tức là quá trình xác thực trên nhiều thiết bị. Nếu có, hãy giải thích sự thuận tiện của việc tạo khoá truy cập mới và hướng dẫn họ thực hiện quy trình tạo.

Đồng bộ hoá thông tin chi tiết về khoá truy cập với nhà cung cấp bằng cách sử dụng tín hiệu

Để đảm bảo tính nhất quán và mang lại trải nghiệm tốt hơn cho người dùng, Bên tin cậy (RP) có thể sử dụng WebAuthn Signals API để truyền đạt thông tin cập nhật về thông tin đăng nhập và thông tin người dùng cho nhà cung cấp khoá truy cập.

Ví dụ: để danh sách khoá truy cập của người dùng do trình cung cấp khoá truy cập cung cấp luôn chính xác, hãy đồng bộ hoá thông tin đăng nhập trên phần phụ trợ. Bạn có thể báo hiệu rằng một khoá truy cập không còn tồn tại để các nhà cung cấp khoá truy cập có thể xoá những khoá truy cập không cần thiết.

Tương tự, bạn có thể báo hiệu nếu người dùng cập nhật tên người dùng hoặc tên hiển thị trên dịch vụ của bạn để giúp thông tin người dùng mà trình cung cấp khoá truy cập hiển thị (ví dụ: trong hộp thoại chọn tài khoản) luôn được cập nhật.

Để tìm hiểu thêm về các phương pháp hay để duy trì tính nhất quán của khoá truy cập, hãy xem bài viết Duy trì tính nhất quán giữa khoá truy cập và thông tin xác thực trên máy chủ của bạn bằng Signal API.

Không yêu cầu yếu tố thứ hai

Khoá truy cập mang đến giải pháp bảo vệ mạnh mẽ, tích hợp sẵn trước các mối đe doạ phổ biến như tấn công giả mạo. Do đó, yếu tố xác thực thứ hai không làm tăng đáng kể giá trị bảo mật. Thay vào đó, việc này tạo ra một bước không cần thiết cho người dùng trong quá trình đăng nhập.

Danh sách kiểm tra

  • Cho phép người dùng đăng nhập bằng khoá truy cập thông qua tính năng tự động điền biểu mẫu.
  • Đưa ra tín hiệu khi không tìm thấy thông tin đăng nhập khớp với khoá truy cập trên máy chủ phụ trợ.
  • Nhắc người dùng tự tạo khoá truy cập nếu họ chưa tạo khoá truy cập sau khi đăng nhập.
  • Tự động tạo khoá truy cập (tạo có điều kiện) sau khi người dùng đăng nhập bằng mật khẩu (và yếu tố thứ hai).
  • Nhắc tạo khoá truy cập cục bộ nếu người dùng đã đăng nhập bằng khoá truy cập trên nhiều thiết bị.
  • Báo hiệu danh sách khoá truy cập hiện có và thông tin người dùng đã cập nhật (tên người dùng, tên hiển thị) cho nhà cung cấp sau khi đăng nhập hoặc khi có thay đổi.

Tài nguyên