2016-09-27 54 views
14

Tôi đang cố gắng tạo cơ chế xác thực trong ứng dụng (cordova) của tôi cho android, cho phép người dùng đăng nhập bằng mật khẩu và tên người dùng hoặc cho phép họ quét ngón tay của họ để đăng nhậpXác thực vân tay Cordova trên máy chủ

Làm cách nào để xác minh một dấu vân tay được đăng ký trên máy khách, phía máy chủ? điều này thậm chí có thể sử dụng được ở Cordova không? Tôi cố gắng truyền tải những kết quả của một ngón tay quét vào máy chủ của tôi: này trông giống như:

FingerprintAuth.isAvailable(function(result) { 
    if (result.isAvailable) { 
    if(result.hasEnrolledFingerprints){ 
     FingerprintAuth.show({ 
     clientId: client_id, 
     clientSecret: client_secret 
     }, function (result) { 
     alert(JSON.stringify(result)); 

     $http.post('http://192.168.149.33:3000/authorize', result).then(
      function(response) {} 
     ); 

     if (result.withFingerprint) { 
      $scope.$parent.loggedIn = true; 
      alert("Successfully authenticated using a fingerprint"); 
      $location.path("/home"); 
     } else if (result.withPassword) { 
      alert("Authenticated with backup password"); 
     } 
     }, function(error) { 
     console.log(error); // "Fingerprint authentication not available" 
     }); 
    } else { 
     alert("Fingerprint auth available, but no fingerprint registered on the device"); 
    } 
    } 
}, function(message) { 
    alert("Cannot detect fingerprint device : "+ message); 
}); 

Server side tôi đang nhận dữ liệu sau (3 quét riêng biệt):

{ withFingerprint: 't8haYq36fmBPUEPbVjiWOaBLjMPBeUNP/BTOkoVtZ2ZiX20eBVzZAs3dn6PW/R4E\n' } 
{ withFingerprint: 'rA9H+MIoQR3au9pqgLAi/EOCRA9b0Wx1AvzC/taGIUc8cCeDfzfiDZkxNy5U4joB\n' } 
{ withFingerprint: 'MMyJm46O8MTxsa9aofKUS9fZW3OZVG7ojD+XspO71LWVy4TZh2FtvPtfjJFnj7Sy\n' } 

Các mẫu dường như thay đổi mỗi lần, có cách nào có thể liên kết các ngón tay in để ví dụ một mẫu được lưu dưới một người dùng trên cơ sở dữ liệu?

+0

Tôi tin rằng các plugin nên là con đường để đi cho triển khai như vậy. Vui lòng xem plugin này - https://github.com/mjwheatley/cordova-plugin-android-fingerprint-auth – Gandhi

+0

Xin chào, tôi có nghi ngờ ?. Làm thế nào để có được clientid và client_secret? –

+0

@ HariKrishnan.P Tôi nghĩ bạn sẽ phải đi sâu vào mã nguồn gốc cho điều đó. Hoặc bạn có thể tìm kiếm một plugin cordova mà giao diện mà chức năng bản địa. –

Trả lời

7

Câu trả lời ngắn

Các chuỗi được trả về bởi API này không phải là "mẫu vân tay". Vì vậy, bạn sẽ không thể để xác thực theo cách mà bạn đang suy nghĩ ...

Long trả lời

Hãy bắt đầu bằng cách nhìn vào source code của API có vẻ như bạn đang sử dụng.

Nhìn vào this file chúng ta thấy các phương pháp này:

public static void onAuthenticated(boolean withFingerprint) { 
    JSONObject resultJson = new JSONObject(); 
    String errorMessage = ""; 
    boolean createdResultJson = false; 
    try { 

     if (withFingerprint) { 
      // If the user has authenticated with fingerprint, verify that using cryptography and 
      // then return the encrypted token 
      byte[] encrypted = tryEncrypt(); 
      resultJson.put("withFingerprint", Base64.encodeToString(encrypted, 0 /* flags */)); 
     } else { 
      // Authentication happened with backup password. 
      resultJson.put("withPassword", true); 

      // if failed to init cipher because of InvalidKeyException, create new key 
      if (!initCipher()) { 
       createKey(); 
      } 
     } 
     createdResultJson = true; 

// ... 

/** 
* Tries to encrypt some data with the generated key in {@link #createKey} which is 
* only works if the user has just authenticated via fingerprint. 
*/ 
private static byte[] tryEncrypt() throws BadPaddingException, IllegalBlockSizeException { 
    return mCipher.doFinal(mClientSecret.getBytes()); 
} 

Nhìn vào những gì đang được đưa vào "withFingerprint". Đó là mã hóa Base64 của bí mật máy khách được mã hóa. Về mặt kỹ thuật, số này là xác thực của bạn. Bạn sẽ sử dụng mã thông báo này để xác thực yêu cầu và máy chủ của bạn sẽ giải mã và xác thực bí mật ứng dụng khách.

Tóm tắt

Fingerprinting cho biết thêm một mức độ bảo mật, nhưng nó không phải là phương tiện duy nhất của an ninh. Một mối quan hệ cần phải được thiết lập trước với thiết bị và máy chủ.

tôi thấy sơ đồ này là hữu ích trong việc tìm hiểu mục đích của xác thực vân tay android của (ref: http://android-developers.blogspot.com/2015/10/new-in-android-samples-authenticating.html)

enter image description here

+0

Cảm ơn bạn rất nhiều vì điều này! –

+0

@MarkStroeven không sao cả! Tôi đã học được một chút về vân tay quá :) – souldzin

+0

thông tin hữu ích. Cảm ơn. chỉ cần thêm liên kết của blog android cho sơ đồ trên: https://android-developers.googleblog.com/2015/10/new-in-android-samples-authenticating.html – Tapash

1

Bạn không thể xác thực vân tay trên máy chủ, dấu vân tay được lưu trữ hoặc xác thực bằng cách sử dụng Live Scan/Biometric template. Xác thực được thực hiện bằng cách so sánh mẫu quét hiện tại với các mẫu được lưu trước đó

Trước hết bạn không có quyền truy cập vào các mẫu được lưu trữ này (Không được cung cấp bởi nhà cung cấp hệ điều hành/Nhà sản xuất điện thoại) và Nếu chúng tôi cho rằng bạn có quyền truy cập những mẫu đó, sau đó là một thuật toán hiệu quả (dựa trên hình ảnh/Mẫu dựa) được yêu cầu để so sánh mẫu hiện tại với các mẫu được lưu trước đó. Bạn không thể đơn giản xác thực nó bằng cách so sánh chuỗi.

Các vấn đề liên quan