解密指紋和麪容認證的實現方法

科幻電影一直是人們津津樂道的話題,其中不乏一些經典場面,讓觀衆爲之震驚讚嘆,例如《鋼鐵俠》中的懸浮虛擬觸摸屏、《碟中諜》中的指紋虹膜識別等。現在,這些看似高大上的科技也走進了咱們的平常生活,像指紋與面容識別,其應用已經極爲廣泛與普遍。java

當今社會對我的隱私的保護愈來愈重視,對App的安全性也提出了更高的要求,具有私密性與獨特性的指紋與面容識別,就成爲了強有力的保障。當用戶在解鎖設備、支付、文件訪問時,利用指紋或者面容認證,這在很大程度上減小了賬號盜取、信息泄露的風險。android

華爲線上快速身份驗證服務(FIDO)提供了相關功能:開放基於WebAuthn標準的FIDO2客戶端能力,提供本地指紋、面容認證開放能力,爲應用提供安全可信的本地生物特徵認證和安全便捷的線上快速身份驗證能力。其優點在於經過系統完整性檢測和密鑰校驗機制保證結果安全可信,通用的無密碼用戶身份驗證方案,易與現有賬號基礎設施集成。接下來,爲你們說明如何集成指紋和麪容認證能力。git

主要的接入步驟以下:github

1.   配置AppGallery Connect
2.   集成HMS Core SDK
3.   集成本地生物認證能力web

步驟一、2能夠參考超連接中的指導進行完成,這裏不作贅述。
須要注意的是步驟2中提供了兩種本地生物認證的SDK:安全

Bioauthn-AndroidXide

implementation 'com.huawei.hms:fido-bioauthn-androidx:5.2.0.301'

Bioauthn測試

implementation 'com.huawei.hms:fido-bioauthn:5.2.0.301'

這兩個SDK對外表現的能力略有不一樣。主要表如今BioAuthn-AndroidX SDK的指紋認證能力提供統一界面,不須要應用本身繪製指紋認證提示界面;BioAuthn SDK的指紋認證能力不提供統一界面,須要應用本身繪製指紋認證提示界面。ui

能夠參考官網FAQ中的說明:this

此次咱們主要介紹Bioauthn-AndroidX的集成,Demo能夠在這裏下載

集成本地生物認證能力

注意:1.    請保證手機沒有root過,否則沒法使用指紋和麪容能力2.    測試前請先保證手機中已經有相應的指紋和麪容信息,不然會報相關的錯誤碼。能夠在設置-生物識別和密碼-指紋/人臉識別中添加相關指紋和麪容

指紋認證

使用指紋認證分爲兩步:

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);

>>訪問華爲線上快速身份驗證服務官網,瞭解更多相關內容
>>獲取華爲線上快速身份驗證服務開發指導文檔
>>華爲HMS Core官方論壇
>>華爲線上快速身份驗證服務開源倉庫地址:GitHubGitee

點擊右上角頭像右方的關注,第一時間瞭解華爲移動服務最新技術~

相關文章
相關標籤/搜索