Xác thực vân tay trong ứng dụng Android
Bài đăng này đã không được cập nhật trong 8 năm
GIỚI THIỆU
Xin chào các bạn, hiện giờ là tháng 5 năm 2016 sau công nguyên, xu hướng của những chiếc điện thoại thông minh hiện nay là màn hình lớn 5 inches trở lên, độ phân giản 4K, camera trung bình khoảng 16Mp, RAM cỡ 2 - 4GB, bộ nhớ lưu trữ từ 16 - 200GB và đặc biệt gần như không thể thiếu đó là bảo mật vân tay, vân tay everywhere, cầm chiếc điện thoại thông minh lên quẹt nhẹ tay vào phím home và đọc thần chú “vừng ơi mở ra” vậy là xong không cần mật khẩu hay mã pin, thật tuyệt vời.
Bạn có muốn ứng dụng của bạn có thêm tính năng “vừng ơi mở ra” không? Hãy cùng tôi tìm hiểu cách sử dụng bảo mật vân tay trong ứng dụng Android trong bài viết này. (Bài viết này mang tính chất giới thiệu.)
FINGERPRINT API TRÊN MARSHMALLOW
Từ bản Android 6.0 Marshmallow Google đã đưa chúng ta gần hơn đến cuối kỷ nguyên của password. Với việc giới thiệu Fingerprint Authentication API, Hệ điều hành phổ biến nhất thế giới đã góp phần thúc đẩy công nghệ bảo mật vân tay.
Với Fingerprint Authentication API được Google tạo ra giúp đơn giản hóa việc làm việc với bảo mật vân tay trên tất cả các thiết bị chạy hệ điều hành Android có hỗ trợ. Lập trình viên có thể xác thực người dùng ngay trong ứng dụng cho mọi thứ từ đăng nhập cho đến mua đồ chỉ với một cái chạm nhẹ ngón tay.
Tất nhiên để làm được điều đó sẽ cần 3 thứ sau đây:
- Thiết bị di động của người dùng phải có đầu đọc vân tay, thứ mà các điện thoại trung đến cao cấp đều có.
- Thiết bị trên phải chạy hệ điều hành Android 6.0 Marshmallow (API 23) hoặc mới hơn.
- Người dùng bắt buộc phải đăng ký dấu vân tay của họ trên thiết bị.
FINGERPRINTMANAGER
Class FingerprintManager
sẽ quản lý tất cả các truy cập đến phần cứng đọc vân tay. Sử dụng FingerprintManager
chúng ta có thể kiểm tra xem thiết bị có hỗ trợ đọc vân tay không nếu có thì xác thực và xử lý kết quả thành công hay thất bại. Giống như các dịch vụ khác để lấy được dịch vụ FingerprintManager chúng ta dùng đoạn code sau:
FingerprintManager fpManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
KIỂM TRA PHẦN CỨNG
Khi đã có một đối tượng thuộc lớp FingerprintManager
chúng ta có thể kiểm tra xem thiết bị hiện tại có hỗ trợ đọc và xác thực vân tay hay không bằng method isHardwareDetected()
. Nếu phần cứng không hỗ trợ chúng ta phải dùng một cách xác thực khác. Tiếp theo nếu phần cứng hỗ trợ ta phải kiểm tra xem người dùng đã thêm dấu vân tay của họ vào trong thiết bị chưa bởi vì phải có dấu vân tay trước đó so sánh khi xác thực bằng method hasEnrolledFingerprints()
.
FingerprintManager fingerprintManager = (FingerprintManager) getSystemService(Context
.FINGERPRINT_SERVICE);
if (!fingerprintManager.isHardwareDetected()) {
// Device doesn't support fingerprint authentication
} else if (!fingerprintManager.hasEnrolledFingerprints()) {
// User hasn't enrolled any fingerprints to authenticate with
} else {
// Everything is ready for fingerprint authentication
}
XÁC THỰC
Nếu tất cả các điều kiện đã ok, chúng ta có thể bắt đầu xác thực một dấu vân tay bằng cách gọi method authenticate()
của FingerprintManager
@RequiresPermission(USE_FINGERPRINT)
public void authenticate(@Nullable CryptoObject crypto, @Nullable CancellationSignal cancel,
int flags, @NonNull AuthenticationCallback callback, @Nullable Handler handler)
Chúng ta cùng tìm hiểu mỗi parameter mà method này nhận vào có ý nghĩa gì.
CryptoObject
Được giới thiệu cùng với Android 6.0 để hỗ trợ FingerprintManager
, CryptoObject
là một class wrapper cho crypto object mà FingerprintManager
hỗ trợ. bao gồm Signature
, Cipher
và Mac
.
Google cũng giới thiệu một số tính năng mới của Keystore, ví dụ như tính năng có thể generate ra key sử dụng KeyGenerator, người dùng phải xác thực trước đó.
CancellationSignal
Cung cấp cho chúng ta khả năng hủy việc lắng nghe vân tay. Method cancel()
sẽ được gọi trong method onPause()
. Đảm bảo rằng chúng ta không lắng nghe vân tay khi ứng dụng đã đóng.
int flags
Chúng ta có thể và nên truyền 0.
AuthenticationCallback
Đây chính là listener cho các events. Có 4 method như sau:
public void onAuthenticationError(int errorCode, CharSequence errString)
Được gọi khi có lỗi nào đó xảy ra nhưng dấu vân tay vẫn không được xác thực.
public void onAuthenticationHelp(int helpCode, CharSequence helpString)
Có lỗi xảy ra nhưng trả về một mã lỗi cũng như chuỗi thông báo để có thể thông báo đến người dùng.
public void onAuthenticationSucceeded(AuthenticationResult result)
Xác thực thành công, AuthenticationResult chức CryptoObject
gắn với lần xác thực này.
public void onAuthenticationFailed()
Khi nhận được dấu vân tay nhưng đó là dấu vân tay không hợp lệ.
Handler
Dùng cho việc xác thực trên một thread khác.
Demo tham khảo bạn có thể clone source code sample của Google tại đây
All rights reserved