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

pswyjz發表於2021-09-09

前言

  隨著人們對於個人資訊保安越來越重視,使用者對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聯盟成員網址

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和示例程式碼:
  

後期預告

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


原作者:別吃草莓

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/755/viewspace-2826002/,如需轉載,請註明出處,否則將追究法律責任。

相關文章