一文讀懂華為FIDO2指紋/3D 面容登錄技術


前言

  隨着人們對於個人信息安全越來越重視,用戶對APP安全要求也越來越高,尤其是金融類APP,很多都已支持指紋&3D登錄功能。相較於傳統登錄方法,指紋&3D面容登錄可省去輸入賬戶、密碼、驗證碼等環節,在最大限度地方便用戶的同時,也保證了用戶信息的私密。那么,如何讓自己的APP增加指紋/面容登錄功能呢?

在這里插入圖片描述
  只要接入HMS線上快速驗證服務(FIDO),即可幫助你的APP實現指紋&3D面容登錄功能。

HMS Core FIDO2 是個啥?

  Fast Identity Online是一套身份鑒別框架協議。FIDO聯盟於2012年7月成立,至2019年5月已達251家,囊括業界領先廠商,技術規范包括UAF和U2F兩大系列,並推出FIDO 2.0項目。FIDO聯盟成員網址 https://fidoalliance.org/members/

FIDO成員舉例

在這里插入圖片描述

  FIDO (Fast Identity Online)規范旨在提供通用、安全、便捷的無密碼和多因子線上用戶身份驗證技術方案。支持應用於用戶登錄、轉賬支付等各種需要驗證用戶身份的場景。FIDO 2(讀音:“faìduo兔”或“faìdōu 兔”)規范定義了一個強大的身份驗證解決方案。

  FIDO2典型的應用場景有如下三種:

  • 指紋/3D面容登錄;
  • 指紋/3D面容轉賬/支付;
  • 雙因子認證;

  本期我們將介紹第一個應用場景:指紋/3D面容登錄。在應用內登錄帳號時,不需要用戶輸密碼,只需要驗證指紋/3D面容即完成登錄,避免密碼、撞庫等安全風險。

場景演示

  下方的Gif圖展示FIDO2如何完成指紋/3D面容登錄的過程。

在這里插入圖片描述

HMS Core FIDO2 怎么做到的?

  FIDO規范定義了一套在線身份認證的技術架構。其中,除了應用和應用服務器以外,還包括3個組件:FIDO認證器、FIDO客戶端和FIDO服務器。

在這里插入圖片描述

  • FIDO認證器:用來進行本地認證的機制或設備,分為平台認證器和漫游認證器。在面向最終用戶時,認證器通常被稱為安全密鑰。
    平台認證器:集成在使用FIDO的設備上的認證器,比如手機或筆記本電腦上基於指紋識別硬件的認證器。

  • 漫游認證器:游離於使用FIDO的設備,通過藍牙、NFC或USB連接的認證器,比如形狀類似於U盾或動態令牌的認證器。

  • FIDO客戶端:集成在平台中(如Windows、MacOS和HMS Core)中,提供SDK給應用集成;或集成在瀏覽器中(如Chrome、Firefox和華為瀏覽器),提供JavaScript API給服務集成。FIDO客戶端是應用調用FIDO服務器和FIDO認證器完成認證的橋梁。

  • FIDO服務器:在應用服務器需要發起FIDO認證時,生成符合FIDO規范的認證請求,發送給應用服務器;並在FIDO認證器完成本地認證后,接收應用服務器返回的FIDO認證響應,並進行較驗。

  FIDO規范定義了兩個主要流程:注冊和認證。從用戶登錄這個實際應用場景來說,注冊流程對應開通指紋/3D面容登錄的過程,認證流程對應使用指紋/3D面容完成登錄的過程。

  在注冊流程中,FIDO認證器產生一對用戶公私鑰對作為認證憑據,私鑰存儲在FIDO認證器中,公鑰發送給FIDO服務器存儲。同時,FIDO服務器建立用戶和認證憑據的關聯關系,在認證流程中使用。

在這里插入圖片描述
  在認證流程中,FIDO認證器使用用戶私鑰對挑戰值進行簽名,FIDO服務器使用用戶公鑰驗證簽名,驗證通過即認為是合法用戶。

在這里插入圖片描述

如何集成華為HMS Core FIDO2?

在這里插入圖片描述

開發前准備

  FIDO2的集成准備,超級簡單,除了接入HMS SDK必備的agc、maven和混淆等配置之外,只需加上FIDO2的編譯依賴即可,坐標如下:
  implementation 'com.huawei.hms:fido-fido2:5.0.0.301'

  開發(表格性的,錯誤碼、返回值、編譯依賴參考ML)
  FIDO2分成兩個操作,注冊和認證,處理流程類似。關鍵過程代碼如下:

  1. 初始化一個Fido2Client實例
    Fido2Client fido2Client = Fido2.getFido2Client(activity);
  2. 調用Fido2Client.getRegistrationIntent()發起注冊。或調用Fido2Client.getAuthenticationIntent()發起認證。從FIDO服務器獲取挑戰值及相關策略,並組裝請求消息。(這里僅提供FIDO客戶端的API,涉及與FIDO服務器的交互,請參考相關規范,並聯系FIDO服務器供應商獲取相關接口說明。)然后調用Fido2Client.getRegistrationIntent()發起注冊。或調用Fido2Client.getAuthenticationIntent()發起認證。
    在回調中調用Fido2Intent.launchFido2Activity(),啟動注冊(requestCode為Fido2Client.REGISTRATION_REQUEST)或認證(requestCode為Fido2Client.AUTHENTICATION_REQUEST)。該回調在主線程中執行。
fido2Client.getRegistrationIntent(registrationRequest, registrationOptions, new Fido2IntentCallback() {
@Override
    public void onSuccess(Fido2Intent fido2Intent) {
    fido2Intent.launchFido2Activity(XXXActivity.this, Fido2Client.REGISTRATION_REQUEST);
    }
    @Override
    public void onFailure(int errorCode, CharSequence errString) {
    Log.e("errorCode: "+ errorCode + ", errorMsg: " + errString);
    }
});
  1. 在回調Activity.onActivityResult()中,調用getFido2RegistrationResponse()或Fido2Client.getFido2AuthenticationResponse()獲取注冊或認證的結果。
Fido2RegistrationResponse fido2RegistrationResponse = fido2Client.getFido2RegistrationResponse(data)
  1. 把注冊或認證的結果發送給FIDO服務器進行驗證。
    (這里僅提供FIDO客戶端的API,涉及與FIDO服務器的交互,請參考相關規范,並聯系FIDO服務器供應商獲取相關接口說明,代碼略)

更多信息

  華為開發者官網上也有相應的演示demo,示例代碼和開發文檔。
  Github演示Demo和示例代碼:
  https://github.com/HMS-Core/hms-FIDO-demo-java

  華為FIDO2慕課視頻:
  https://developer.huawei.com/consumer/cn/training/detail/101583008688294169

  開發指南:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/introduction-0000001051069988-V5

  API參考:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References-V5/fido2overview-0000001050176660-V5

后期預告

  基於線上快速身份驗證服務,下期聊聊FIDO2定制開發能力,認證器選擇策略、UI界面定制,后面還會有實戰經驗分享,大家可以持續關注~


原文鏈接:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&tid=0201315130192110308

原作者:別吃草莓


免責聲明!

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



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