Khi người dùng tạo khoá truy cập, máy chủ bên đáng tin cậy sẽ lưu một số thông tin chi tiết, trong khi trình cung cấp thông tin đăng nhập (chẳng hạn như Trình quản lý mật khẩu của Google) sẽ lưu những thông tin khác. Cụ thể:
- Máy chủ bên đáng tin cậy sẽ lưu thông tin xác thực khoá công khai.
- Nhà cung cấp thông tin xác thực sẽ lưu tên người dùng, tên hiển thị, khoá riêng tư và các siêu dữ liệu liên kết khác. Siêu dữ liệu này giúp người dùng xác định và chọn khoá truy cập cần thiết trong quá trình đăng nhập.
Sự không nhất quán tiềm ẩn giữa dữ liệu được lưu trên máy chủ bên thứ ba và nhà cung cấp thông tin đăng nhập có thể dẫn đến trải nghiệm người dùng kém. Vấn đề có thể phát sinh trong các trường hợp sau:
- Thông tin đăng nhập bị xoá trên máy chủ bên thứ ba nhưng không bị xoá trên trình cung cấp thông tin đăng nhập, dẫn đến việc trình cung cấp thông tin đăng nhập hiển thị thông tin đăng nhập đã xoá cho người dùng.
- Tên người dùng hoặc tên hiển thị được cập nhật trên máy chủ bên thứ ba nhưng không được cập nhật trên trình cung cấp thông tin đăng nhập, dẫn đến việc trình cung cấp thông tin đăng nhập hiển thị thông tin đã lỗi thời.
Signal API của Trình quản lý thông tin đăng nhập cho phép các bên đáng tin cậy giao tiếp với nhà cung cấp thông tin đăng nhập để xoá thông tin đăng nhập và cập nhật siêu dữ liệu người dùng, chẳng hạn như tên người dùng và tên hiển thị. Có 3 loại yêu cầu được hỗ trợ cho các trường hợp khác nhau:
SignalUnknownCredentialRequest- Cho biết rằng một thông tin đăng nhập cụ thể không còn hợp lệ và cần được ẩn hoặc xoá khỏi trình cung cấp thông tin đăng nhập.
SignalAllAcceptedCredentialIdsRequest- Cung cấp danh sách mã thông tin đăng nhập được chấp nhận cho trình cung cấp thông tin đăng nhập.
SignalCurrentUserDetailsRequest- Cập nhật thông tin chi tiết về siêu dữ liệu của người dùng.
Khả năng tương thích với phiên bản
Signal API có trên các thiết bị chạy Android 15 trở lên và có từ phiên bản 1.6.0-beta03 của thư viện androidx.credentials.
Triển khai
Để sử dụng Signal API, hãy làm theo các bước sau:
Thêm phần phụ thuộc Credential Manager vào dự án của bạn.
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.6.0-rc01") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc01" }
Gọi Signal API
Để gửi yêu cầu tín hiệu đến trình cung cấp thông tin xác thực, hãy sử dụng một yêu cầu tín hiệu được hỗ trợ. Mỗi loại yêu cầu tín hiệu đều yêu cầu một yêu cầu JSON, như minh hoạ trong các ví dụ sau:
Thông tin đăng nhập không xác định (
SignalUnknownCredentialRequest)Sử dụng
SignalUnknownCredentialRequestđể báo hiệu rằng một thông tin đăng nhập bị từ chối và được coi là không xác định. Khi nhận được tín hiệu này, trình cung cấp thông tin đăng nhập sẽ ẩn hoặc xoá thông tin đăng nhập.Tác dụng
Sử dụng tín hiệu này khi bên tin cậy không xác minh được một câu lệnh khoá truy cập. Điều này ngụ ý rằng khoá truy cập không hợp lệ và trình cung cấp thông tin xác thực phải ẩn hoặc xoá khoá truy cập đó.
Các tham số JSON bắt buộc cho yêu cầu này là
rpIdvàcredentialId. Để biết thêm thông tin về cấu trúc JSON, hãy xem các lựa chọn signalUnknownCredential.credentialManager.signalCredentialState( SignalUnknownCredentialRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */) }.toString() ) )Tất cả thông tin đăng nhập được chấp nhận (
SignalAllAcceptedCredentialIdsRequest)Sử dụng
SignalAllAcceptedCredentialIdsRequestđể thông báo cho các trình cung cấp thông tin đăng nhập bằng tập hợp tất cả thông tin đăng nhập được chấp nhận. Sau khi nhận được tín hiệu, trình cung cấp thông tin xác thực sẽ ẩn hoặc xoá mọi thông tin xác thực không có trong danh sách này, hoặc hiện mọi thông tin xác thực đã ẩn trước đó hiện có trong danh sách.Tác dụng
Sử dụng tín hiệu này khi bên đáng tin cậy không xác minh được khoá truy cập. Lỗi này có nghĩa là khoá truy cập không hợp lệ và phải bị nhà cung cấp thông tin xác thực ẩn hoặc xoá. Bạn cũng có thể sử dụng tín hiệu này bất cứ khi nào cần truyền bộ mã nhận dạng thông tin đăng nhập đã biết cho các nhà cung cấp thông tin đăng nhập.
Các tham số JSON bắt buộc cho yêu cầu này là
rpId,userIdvàallAcceptedCredentialIds. Để biết thêm thông tin về cấu trúc JSON, hãy xem các lựa chọn signalAllAcceptedCredential.credentialManager.signalCredentialState( SignalAllAcceptedCredentialIdsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put( "allAcceptedCredentialIds", JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */) ) }.toString() ) )Thông tin chi tiết về người dùng hiện tại (
SignalCurrentUserDetailsRequest)Sử dụng
SignalCurrentUserDetailsRequestđể thông báo cho trình cung cấp thông tin xác thực rằng siêu dữ liệu (chẳng hạn như tên người dùng và tên hiển thị của một người dùng cụ thể) đã được cập nhật và sẽ xuất hiện trong trình cung cấp thông tin xác thực.Tác dụng
Sử dụng tín hiệu này khi người dùng hoặc bên thứ ba đáng tin cậy cập nhật siêu dữ liệu khoá truy cập được liên kết với tài khoản người dùng.
Các tham số JSON bắt buộc cho yêu cầu này là
rpId,userId,namevàdisplayName. Để biết thêm thông tin về cấu trúc JSON, hãy xem phần các lựa chọn signalCurrentUserDetails.credentialManager.signalCredentialState( SignalCurrentUserDetailsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put("name", name /* [String] New Name to be updated for the current user */) put("displayName", displayName /* [String] New display name to be updated for the current user */) }.toString() ) )
Kiểm thử quá trình triển khai
Để kiểm thử việc triển khai Signal API, hãy hoàn tất các bước sau:
Cài đặt mẫu trình cung cấp thông tin đăng nhập có tên là MyVault.
Bật MyVault làm trình cung cấp thông tin đăng nhập trong phần Cài đặt > Mật khẩu, khoá truy cập và tài khoản > Dịch vụ ưu tiên.
Bật tất cả thông báo cho MyVault trong phần Cài đặt > Ứng dụng > MyVault > Thông báo.
Xác minh rằng chế độ Hiện trên màn hình đang bật cho thông báo trong phần Cài đặt > Ứng dụng > MyVault > Thông báo > Danh mục > Kênh thông báo Signal API.
Trong ứng dụng, hãy kích hoạt các luồng gửi yêu cầu tín hiệu đến trình cung cấp thông tin đăng nhập. Bạn sẽ thấy thông báo từ MyVault trên màn hình. Điều này xác minh rằng trình cung cấp thông tin đăng nhập đã nhận được các yêu cầu.