破譯《碟中諜》經典畫面,解密指紋驗證+刷臉!


科幻電影一直是人們津津樂道的話題,其中不乏一些經典場面,讓觀眾為之震驚贊嘆,例如《鋼鐵俠》中的懸浮虛擬觸摸屏、《碟中諜》中的指紋虹膜識別等。

如今,這些看似高大上的科技也走進了我們的日常生活,像指紋與面容識別,其應用已經極為普遍與廣泛。

當今社會對個人隱私的保護越來越重視,對App的安全性也提出了更高的要求,具備私密性與獨特性的指紋與面容識別,就成為了強有力的保障。

當用戶在解鎖設備、支付、文件訪問時,利用指紋或者面容認證,這在很大程度上減少了帳號盜取、信息泄露的風險。

HMS的FIDO提供了相關功能:開放基於WebAuthn標准的FIDO2客戶端能力,提供本地指紋、面容認證開放能力,為應用提供安全可信的本地生物特征認證和安全便捷的線上快速身份驗證能力。

其優勢在於通過系統完整性檢測和密鑰校驗機制保證結果安全可信,通用的無密碼用戶身份驗證方案,易與現有帳號基礎設施集成。

接下來,為大家說明如何集成指紋和面容認證能力。

主要的接入步驟如下:

步驟1、2可以參考超鏈接中的指導進行完成,這里不做贅述。

需要注意的是步驟2中提供了兩種本地生物認證的SDK:
Bioauthn-AndroidX:

-
Java 代碼
1 implementation 'com.huawei.hms:fido-bioauthn-androidx:5.2.0.301'

Bioauthn:

-
Java 代碼
1 implementation 'com.huawei.hms:fido-bioauthn:5.2.0.301'

這兩個SDK對外表現的能力略有不同。

主要表現在BioAuthn-AndroidX SDK的指紋認證能力提供統一界面,不需要應用自己繪制指紋認證提示界面;BioAuthn SDK的指紋認證能力不提供統一界面,需要應用自己繪制指紋認證提示界面。

可以參考官網FAQ中的說明:

這次我們主要介紹Bioauthn-AndroidX的集成,Demo可以在這里下載

集成本地生物認證能力

注:

請保證手機沒有root過,不然無法使用指紋和面容能力

測試前請先保證手機中已經有相應的指紋和面容信息,否則會報相關的錯誤碼。

可以在設置-生物識別和密碼-指紋/人臉識別中添加相關指紋和面容

指紋認證

使用指紋認證分為兩步:

1、初始化BioAuthnPrompt對象,代碼如下:

BioAuthnPrompt bioAuthnPrompt = new BioAuthnPrompt(this, ContextCompat.getMainExecutor(this), new BioAuthnCallback() {
    @Override
    public void onAuthError(int errMsgId, CharSequence errString) {
        showResult("指紋認證報錯. errorCode=" + errMsgId + ",errorMessage=" + errString);
    }
    @Override
    public void onAuthSucceeded(BioAuthnResult result) {
        showResult("指紋認證成功. CryptoObject=" + result.getCryptoObject());
    }
    @Override
    public void onAuthFailed() {
        showResult("指紋認證失敗.");
    }
});

2、創建提示信息,並進行認證。

// 自定義設置信息
BioAuthnPrompt.PromptInfo.Builder builder =
        new BioAuthnPrompt.PromptInfo.Builder().setTitle("主標題")
                .setSubtitle("副標題")
                .setDescription("內容描述");
 
//允許使用其他認證方式
builder.setDeviceCredentialAllowed(true);
 
BioAuthnPrompt.PromptInfo info = builder.build();
 
//進行認證
bioAuthnPrompt.auth(info);

配置完成后就可以進行指紋認證了,認證頁面如下:

 

面容認證

面容認證的限制條件比較多,具體請參考FAQ

 

1、檢查是否有相機權限(EMUI10.1及以后版本不需要相機權限)

int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
    showResult("請先申請相機權限");
    
    ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA}, 1);
    return;
}

2、檢查當前設備是否支持人臉識別

FaceManager faceManager = new FaceManager(this);
 
int errorCode = faceManager.canAuth();
if (errorCode != 0) {
    resultTextView.setText("");
    showResult("不支持人臉識別. errorCode=" + errorCode);
    return;
}

3、進行人臉認證

int flags = 0;
Handler handler = null;
CryptoObject crypto = null;
 
faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() {
    @Override
    public void onAuthError(int errMsgId, CharSequence errString) {
        showResult("認證報錯. errorCode=" + errMsgId + ",errorMessage=" + errString
                + (errMsgId == 1012 ? " 沒有相機權限." : ""));
    }
 
    @Override
    public void onAuthHelp(int helpMsgId, CharSequence helpString) {
        showResult("返回識別過程中提示信息. helpMsgId=" + helpMsgId + ",helpString=" + helpString + "\n");
    }
 
    @Override
    public void onAuthSucceeded(BioAuthnResult result) {
        showResult("認證成功. CryptoObject=" + result.getCryptoObject());
    }
 
    @Override
    public void onAuthFailed() {
        showResult("認證失敗.");
    }
}, handler);

這樣人臉識別的代碼就完成了,調用后就會進行人臉認證。
需要注意的是人臉認證沒有默認的UI頁面,需要我們自己去設計配置。

使用場景

指紋認證

一般來說指紋認證是用在支付場景的,用戶付款前可以使用指紋認證來進行安全檢測。

指紋認證也可以用在文件保護App里,只有指紋認證通過才可以查看相關文件。

面容識別

面容識別也可以在支付場景和文件保護APP中使用,這個不再贅述

在文件保護APP方面,面容識別的效果會比指紋表現的更出色。

因為文件保護App有一個通病,那就是“此地無銀三百兩”,擺明了告訴別人你這個文件很重要或很敏感。

所以其他人只要搞定了你的指紋(雖然也比較困難),那就暢通無阻了。

那么文件保護App除了可以在明面上展示指紋識別外,還可以“悄悄地”再做一層面容識別(面容識別不需要設計UI界面),只有指紋識別和面容識別都過了,才展示正確的文件,否則可以展示假文件。

這樣做的話就可以更好的保護用戶的隱私。

具體的人臉識別的代碼實現可以是下面這樣的:

faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() {
    @Override
    public void onAuthError(int errMsgId, CharSequence errString) {
        if(isFingerprintSuccess){//指紋認證成功但面容識別失敗
            //展示假文件
            showFakeFile();
        }
    }
 
    @Override
    public void onAuthHelp(int helpMsgId, CharSequence helpString) {
    }
 
    @Override
    public void onAuthSucceeded(BioAuthnResult result) {
        if(isFingerprintSuccess){//指紋認證成功
            //展示真文件
            showRealFile();
        }else {//指紋認證失敗
            //展示假文件
            showFakeFile();
        }
        
    }
 
    @Override
    public void onAuthFailed() {
        if(isFingerprintSuccess){//指紋認證成功但面容識別失敗
            //展示假文件
            showFakeFile();
        }
        
    }
}, handler);

 

 

>>訪問華為FIDO官網獲取FIDO開發文檔

>>訪問華為開發者聯盟官網開發指導文檔

>>華為移動服務開源倉庫地址:GitHubGitee

 

原文鏈接:developer.huawei.com/consumer/cn…

原作者:胡椒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM