Sử dụng sinh trắc học trên Android

Tram Ho

Một trong những phương pháp bảo vệ thông tin nhạy cảm hoặc nội dung riêng tư trong ứng dụng của bạn là yêu cầu xác thực sinh trắc học, chẳng hạn như sử dụng nhận dạng khuôn mặt hoặc nhận dạng vân tay. Bài hướng dẫn này giải thích cách hỗ trợ luồng đăng nhập sinh trắc học trong ứng dụng của bạn.

Khai báo các loại authentication mà app bạn hỗ trợ

Để xác định các loại authen mà ứng dụng của bạn hỗ trợ, hãy sử dụng interface BiometricManager.Authenticators. Hệ thống cho phép bạn khai báo các loại xác thực sau:

Xác thực bằng cách sử dụng phần cứng đáp ứng mức độ mạnh như được xác định trên trang định nghĩa về khả năng tương thích.

Xác thực bằng cách sử dụng phần cứng đáp ứng mức độ yếu như được xác định trên trang định nghĩa về khả năng tương thích.

Xác thực bằng thông tin đăng nhập khóa màn hình – mã PIN, hình mở khóa hoặc mật khẩu của người dùng.

Để đăng ký trình xác thực, người dùng cần tạo mã PIN, hình mở khóa hoặc mật khẩu. Nếu người dùng chưa có, quy trình đăng ký sinh trắc học sẽ nhắc họ tạo những thứ này.

Để xác định các loại xác thực sinh trắc học mà ứng dụng của bạn sử dụng, hãy chuyển một loại xác thực hoặc kết hợp bitwise của các loại vào phương thức setAllowedAuthenticators(). Đoạn code sau cho biết cách hỗ trợ xác thực bằng cách sử dụng phần tử phần cứng “mạnh” hoặc bằng chứng xác thực khóa màn hình.

Kiểm tra xem có thể xác thực sinh trắc học không

Sau khi bạn quyết định các yếu tố xác thực mà ứng dụng của bạn hỗ trợ, hãy kiểm tra xem các yếu tố này có sẵn không. Để làm như vậy, hãy chuyển cùng một kiểu kết hợp bitwise mà bạn đã khai báo trước đó vào phương thức canAuthenticate(). Nếu cần, gọi intent action ACTION_BIOMETRIC_ENROLL. Trong intent extra, cung cấp tập hợp các trình xác thực mà ứng dụng của bạn chấp nhận. Mục đích này nhắc người dùng đăng ký thông tin xác thực cho trình xác thực mà ứng dụng của bạn chấp nhận.

Xác định cách người dùng xác thực

Sau khi người dùng xác thực, bạn có thể kiểm tra xem người dùng đã xác thực bằng thông tin xác thực thiết bị hay thông tin xác thực sinh trắc học bằng cách gọi getAuthenticationType().

Hiển thị lời nhắc đăng nhập

Để hiển thị lời nhắc hệ thống yêu cầu người dùng xác thực bằng thông tin đăng nhập sinh trắc học, hãy sử dụng Biometric librảy. Dialog do hệ thống cung cấp này nhất quán trên các ứng dụng sử dụng nó, tạo ra trải nghiệm người dùng đáng tin cậy hơn.

Các bước để thêm xác thực sinh trắc học vào ứng dụng của bạn bằng Biometric library:

  1. Trong app/build.gradle file, thêm dependency Biometric library:

  1. Trong activity hoặc fragment sử dụng dialog biometric login, hiển thị dialog như sau:

Sử dụng giải pháp mật mã phụ thuộc vào xác thực

Để bảo vệ thêm thông tin nhạy cảm trong ứng dụng của mình, bạn có thể kết hợp mật mã vào quy trình xác thực sinh trắc học của mình bằng cách sử dụng phiên bản CryptoObject. Framework hỗ trợ các đối tượng mã hóa sau: Signature, CipherMac.

Sau khi người dùng xác thực thành công bằng lời nhắc sinh trắc học, ứng dụng của bạn có thể thực hiện thao tác mật mã. Ví dụ: nếu bạn xác thực bằng đối tượng Cipher, thì ứng dụng của bạn có thể thực hiện mã hóa và giải mã bằng đối tượng SecretKey.

Các phần sau đi qua các ví dụ về việc sử dụng đối tượng Cipher và đối tượng SecretKey để mã hóa dữ liệu. Mỗi ví dụ sử dụng các phương pháp sau:

Xác thực chỉ bằng thông tin xác thực sinh trắc học

Nếu ứng dụng của bạn sử dụng secret key yêu cầu thông tin đăng nhập sinh trắc học để mở khóa, thì người dùng phải xác thực thông tin đăng nhập sinh trắc học của họ mỗi lần trước khi ứng dụng của bạn truy cập vào key.

Để mã hóa thông tin nhạy cảm chỉ sau khi người dùng xác thực bằng thông tin đăng nhập sinh trắc học, hãy hoàn thành các bước sau:

  1. Generate key sử dụng cấu hình KeyGenParameterSpec sau:

  1. Bắt đầu quy trình xác thực sinh trắc học kết hợp mật mã:

  1. Trong lệnh gọi lại xác thực sinh trắc học của bạn, hãy sử dụng secret key để mã hóa thông tin nhạy cảm:

Xác thực bằng thông tin đăng nhập màn hình khóa hoặc sinh trắc học

Bạn có thể sử dụng secret key cho phép xác thực bằng thông tin xác thực sinh trắc học hoặc thông tin xác thực màn hình khóa (mã PIN, hình mở khóa hoặc mật khẩu). Khi định cấu hình key này, hãy chỉ định khoảng thời gian hiệu lực. Trong khoảng thời gian này, ứng dụng của bạn có thể thực hiện nhiều hoạt động mật mã mà người dùng không cần xác thực lại.

Để mã hóa thông tin nhạy cảm sau khi người dùng xác thực bằng thông tin đăng nhập trên màn hình khóa hoặc sinh trắc học, hãy hoàn thành các bước sau:

  1. Generate key bằng cấu hình KeyGenParameterSpec

  1. Trong khoảng thời gian VALIDITY_DURATION_SECONDS sau khi người dùng xác thực, hãy mã hóa thông tin nhạy cảm:

Xác thực bằng khóa xác thực mỗi lần sử dụng

Bạn có thể cung cấp hỗ trợ cho các khóa xác thực mỗi lần sử dụng trong phiên bản BiometricPrompt của bạn. Khóa như vậy yêu cầu người dùng xuất trình thông tin xác thực sinh trắc học hoặc thông tin xác thực thiết bị mỗi khi ứng dụng của bạn cần truy cập vào dữ liệu được bảo vệ bởi khóa đó. Khóa xác thực mỗi lần sử dụng có thể hữu ích cho các giao dịch giá trị cao, chẳng hạn như thanh toán lớn hoặc cập nhật hồ sơ sức khỏe của một người.

Để liên kết đối tượng BiometricPrompt với khóa auth-per-use, hãy thêm code tương tự như sau:

Xác thực mà không có hành động rõ ràng của người dùng

Theo mặc định, hệ thống yêu cầu người dùng thực hiện một hành động cụ thể, chẳng hạn như nhấn nút, sau khi thông tin xác thực sinh trắc học của họ được chấp nhận. Cấu hình này phù hợp hơn nếu ứng dụng của bạn đang hiển thị hộp thoại để xác nhận một hành động nhạy cảm hoặc rủi ro cao, chẳng hạn như mua hàng.

Tuy nhiên, nếu ứng dụng của bạn hiển thị hộp thoại xác thực sinh trắc học cho hành động có rủi ro thấp hơn, bạn có thể cung cấp gợi ý cho hệ thống rằng người dùng không cần xác nhận xác thực. Gợi ý này có thể cho phép người dùng xem nội dung trong ứng dụng của bạn nhanh hơn sau khi xác thực lại bằng phương thức thụ động, chẳng hạn như nhận dạng dựa trên khuôn mặt hoặc mống mắt. Để cung cấp gợi ý này, hãy truyền false vào phương thức setConfirmationRequired().

Hình ảnh cho thấy hai phiên bản của cùng một dialog. Một phiên bản yêu cầu hành động rõ ràng của người dùng và phiên bản khác thì không:

Đoạn code sau cho biết cách trình bày một dialog không yêu cầu hành động rõ ràng của người dùng để hoàn tất quá trình xác thực:

Cho phép dự phòng thông tin xác thực không phải sinh trắc học

Nếu muốn ứng dụng của mình cho phép xác thực bằng thông tin xác thực sinh trắc học hoặc thiết bị, bạn có thể khai báo rằng ứng dụng của mình hỗ trợ thông tin xác thực thiết bị bằng cách đưa DEVICE_CREDENTIAL vào tập hợp các giá trị mà bạn truyền vào setAllowedAuthenticators().

Nếu ứng dụng của bạn hiện đang sử dụng createConfirmDeviceCredentialIntent() hoặc setDeviceCredentialAllowed() để cung cấp khả năng này, hãy chuyển sang sử dụng setAllowedAuthenticators().

Bài viết đến đây là hết. Cảm ơn các bạn đã đọc bài của mình

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo