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

前言

  隨着人們對於我的信息安全愈來愈重視,用戶對APP安全要求也愈來愈高,尤爲是金融類APP,不少都已支持指紋&3D登陸功能。相較於傳統登陸方法,指紋&3D面容登陸可省去輸入帳戶、密碼、驗證碼等環節,在最大限度地方便用戶的同時,也保證了用戶信息的私密。那麼,如何讓本身的APP增長指紋/面容登陸功能呢?java

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

HMS Core FIDO2 是個啥?

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

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的設備上的認證器,好比手機或筆記本電腦上基於指紋識別硬件的認證器。maven

  • 漫遊認證器:遊離於使用FIDO的設備,經過藍牙、NFC或USB鏈接的認證器,好比形狀相似於U盾或動態令牌的認證器。ide

  • 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

原做者:別吃草莓

相關文章
相關標籤/搜索