打造用戶認證系統,構筑信息安全防線

在當今的數字化時代,信息安全和用戶隱私保護變得越來越重要。用戶身份認證是確保信息安全的第一道防線。通過驗證用戶身份,可以防止未經授權的訪問和數據泄露。它有助于保護用戶的個人信息、賬戶資金和其他敏感數據。此外,用戶身份認證還可以提高系統的安全性,減少惡意行為和欺詐事件的發生。

HarmonyOS SDK用戶認證服務(User Authentication Kit)提供了基于用戶在設備本地注冊的鎖屏口令、人臉和指紋來認證用戶身份的能力,并提供了多設備統一的、集多種認證方式(人臉、指紋、口令)于一體的系統級用戶身份認證控件。用戶身份認證可用于各種鑒權場景,如應用內賬號登錄、支付認證等。

開發準備

申請權限

在開發具備用戶身份認證的應用前,需要先申請權限ohos.permission.ACCESS_BIOMETRIC,應用才能使用生物特征識別能力(如人臉、指紋)進行身份認證。
該權限授權方式為system_grant(系統授權),開發者只需要在module.json5配置文件的requestPermissions標簽中聲明權限,即可獲取系統授權。具體聲明指導請參考申請應用權限-聲明權限。

開發步驟

查詢支持的認證能力

指定認證類型(UserAuthType)和認證等級(AuthTrustLevel),調用getAvailableStatus接口查詢當前的設備是否支持相應的認證能力。

認證等級ATL的選擇參見下表:

以查詢設備是否支持認證可信等級≥ATL1的人臉認證功能為例:

import { BusinessError } from  '@kit.BasicServicesKit';
import { userAuth } from '@kit.UserAuthenticationKit';// 查詢認證能力是否支持
try {    userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL1);    console.info('current auth trust level is supported');
} catch (error) {const err: BusinessError = error as BusinessError;console.error(`current auth trust level is not supported. Code is ${err?.code}, message is ${err?.message}`);
}
發起認證

1.指定用戶認證相關參數AuthParam(包括挑戰值、認證類型UserAuthType列表和認證等級AuthTrustLevel)、配置認證控件界面WidgetParam,調用getUserAuthInstance獲取認證對象。

2.調用UserAuthInstance.on接口訂閱認證結果。

3.調用UserAuthInstance.start接口發起認證,通過IAuthCallback回調返回認證結果UserAuthResult。

當認證成功時返回認證通過類型(UserAuthType)和令牌信息(AuthToken)。

示例1:

發起用戶認證,采用認證可信等級≥ATL3的人臉+鎖屏密碼認證,獲取認證結果:

// API version 10
import { BusinessError } from '@kit.BasicServicesKit';
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { userAuth } from '@kit.UserAuthenticationKit';try {const rand = cryptoFramework.createRandom();const len: number = 16;const randData: Uint8Array = rand?.generateRandomSync(len)?.data;// 設置認證參數const authParam: userAuth.AuthParam = {challenge: randData,authType: [userAuth.UserAuthType.PIN, userAuth.UserAuthType.FACE],authTrustLevel: userAuth.AuthTrustLevel.ATL3,};// 配置認證界面const widgetParam: userAuth.WidgetParam = {title: '請進行身份認證',};// 獲取認證對象const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);console.info('get userAuth instance success');// 訂閱認證結果userAuthInstance.on('result', {onResult(result) {console.info(`userAuthInstance callback result: ${JSON.stringify(result)}`);// 可在認證結束或其他業務需要場景,取消訂閱認證結果userAuthInstance.off('result');}});console.info('auth on success');userAuthInstance.start();console.info('auth start success');
} catch (error) {const err: BusinessError = error as BusinessError;console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);
}

示例2:

發起用戶認證,采用認證可信等級≥ATL3的人臉 + 認證類型相關 + 復用設備解鎖最大有效時長認證,獲取認證結果:

// API version 10
import { BusinessError } from  '@kit.BasicServicesKit';
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { userAuth } from '@kit.UserAuthenticationKit';// 設置認證參數
let reuseUnlockResult: userAuth.ReuseUnlockResult = {reuseMode: userAuth.ReuseMode.AUTH_TYPE_RELEVANT,reuseDuration: userAuth.MAX_ALLOWABLE_REUSE_DURATION,
}
try {const rand = cryptoFramework.createRandom();const len: number = 16;const randData: Uint8Array = rand?.generateRandomSync(len)?.data;const authParam: userAuth.AuthParam = {challenge: randData,authType: [userAuth.UserAuthType.FACE],authTrustLevel: userAuth.AuthTrustLevel.ATL3,reuseUnlockResult: reuseUnlockResult,};// 配置認證界面const widgetParam: userAuth.WidgetParam = {title: '請進行身份認證',};// 獲取認證對象const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);console.info('get userAuth instance success');// 訂閱認證結果userAuthInstance.on('result', {onResult(result) {console.info(`userAuthInstance callback result: ${JSON.stringify(result)}`);// 可在認證結束或其他業務需要場景,取消訂閱認證結果userAuthInstance.off('result');}});console.info('auth on success');userAuthInstance.start();console.info('auth start success');
} catch (error) {const err: BusinessError = error as BusinessError;console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);
}
認證過程中取消認證

1.指定用戶認證相關參數AuthParam(包括挑戰值、認證類型UserAuthType列表和認證等級AuthTrustLevel),獲取認證對象UserAuthInstance,并調用UserAuthInstance.start發起認證。

2.通過使用已經成功發起認證的UserAuthInstance對象調用UserAuthInstance.cancel接口取消本次認證。

示例代碼為發起認證可信等級≥ATL3的人臉+鎖屏密碼認證后,取消認證請求:

import { BusinessError } from  '@kit.BasicServicesKit';
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { userAuth } from '@kit.UserAuthenticationKit';try {const rand = cryptoFramework.createRandom();const len: number = 16;const randData: Uint8Array = rand?.generateRandomSync(len)?.data;// 設置認證參數const authParam: userAuth.AuthParam = {challenge: randData,authType: [userAuth.UserAuthType.PIN, userAuth.UserAuthType.FACE],authTrustLevel: userAuth.AuthTrustLevel.ATL3,};// 配置認證界面const widgetParam: userAuth.WidgetParam = {title: '請進行身份認證',};// 獲取認證對象const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);console.log('get userAuth instance success');// 開始認證userAuthInstance.start();console.log('auth start success');// 取消認證userAuthInstance.cancel();console.log('auth cancel success');
} catch (error) {const err: BusinessError = error as BusinessError;console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);
}
切換自定義認證

針對需要切換自定義認證方式的場景,發起認證請求的方式請參考發起認證,但在傳入的widgetParam需包含字段navigationButtonText。

當前示例僅展示如何配置界面、選擇切換到自定義認證界面,具體拉起的頁面及對應頁面的實現,請開發者自行實現,代碼插入位置可參考注釋提示。

import { BusinessError } from  '@kit.BasicServicesKit';
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { userAuth } from '@kit.UserAuthenticationKit';try {const rand = cryptoFramework.createRandom();const len: number = 16;const randData: Uint8Array = rand?.generateRandomSync(len)?.data;const authParam: userAuth.AuthParam = {challenge: randData,authType: [userAuth.UserAuthType.FACE],authTrustLevel: userAuth.AuthTrustLevel.ATL3,};// 配置認證界面需設置navigationButtonTextconst widgetParam: userAuth.WidgetParam = {title: '請驗證身份',navigationButtonText: '使用密碼',};// 獲取認證對象const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);console.log('get userAuth instance success');// 訂閱認證結果userAuthInstance.on('result', {onResult(result) {// 若收到ResultCode值為12500000,代表操作成功console.log('userAuthInstance callback result = ' + JSON.stringify(result));// 若收到ResultCode值為12500011,說明用戶點擊了導航按鈕想切換自定義認證方式if (result.result == 12500011) {//請開發者自行完成拉起自定義認證界面的實現}}});console.log('auth on success');userAuthInstance.start();console.log('auth start success');
} catch (error) {const err: BusinessError = error as BusinessError;console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);
}
查詢用戶注冊憑據的狀態

指定認證類型(UserAuthType),調用getEnrolledState接口查詢用戶注冊憑據的狀態。

以查詢用戶人臉注冊憑據的狀態為例:

import { BusinessError } from  '@kit.BasicServicesKit';
import { userAuth } from '@kit.UserAuthenticationKit';try {let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE);console.info(`get current enrolled state success, enrolledState: ${JSON.stringify(enrolledState)}`);
} catch (error) {const err: BusinessError = error as BusinessError;console.error(`get current enrolled state failed, Code is ${err?.code}, message is ${err?.message}`);
}

了解更多詳情>>

訪問用戶認證服務聯盟官網

獲取用戶認證服務開發指導文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72927.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72927.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72927.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

北京南文觀點:品牌如何搶占AI 認知的 “黃金節點“

在算法主導的信息洪流中,品牌正在經歷一場隱蔽的認知權爭奪戰,當用戶向ChatGPT咨詢"哪家新能源車企技術最可靠"時,AI調取的知識圖譜數據源將直接決定品牌認知排序。南文樂園科技文化(北京)有限公司&#xff…

音視頻系列——Websockets接口封裝為Http接口

模型服務示例:實時語音轉文本服務 本示例展示一個支持雙協議(WebSocket流式接口HTTP同步接口)的語音轉文本模型服務,并提供將WebSocket接口封裝為HTTP接口的代碼實現。 一、服務架構設計 #mermaid-svg-nw0dMZ4uKfS4vGZR {font-fa…

Axure項目實戰:智慧城市APP(一)(動態面板、拖動效果)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! 課程主題:智慧城市APP便民服務平臺 主要內容:完整智慧APP原型設計 應用場景:各類政務型、B端APP均可參考 案例展示:&…

MySQL 入門大全:數據類型

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/literature?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,…

Java 記憶鏈表,LinkedList 的升級版

文章目錄 記憶鏈表 MemoryLinkedList實戰源代碼 眾所周知,ArrayList 和 LinkedList 是 Java 集合中兩個基本的數據結構,對應數據結構理論中的數組和鏈表。但在這兩個數據結構,開發者們通常使用 ArrayList,而不使用 LinkedList。JD…

《白帽子講 Web 安全》之開發語言安全深度解讀

目錄 引言 1.PHP 安全 1.1變量覆蓋 1.2空字節問題 1.3弱類型 1.4反序列化 1.5安全配置 2Java 安全 2.1Security Manager 2.2反射 2.3反序列化 3Python 安全 3.1反序列化 3.2代碼保護 4.JavaScript 安全 4.1第三方 JavaScript 資源 4.2JavaScript 框架 5.Node.…

鴻蒙HarmonyOS NEXT應用崩潰分析及修復

鴻蒙HarmonyOS NEXT應用崩潰分析及修復 如何保證應用的健壯性,其中一個指標就是看崩潰率,如何降低崩潰率,就需要知道存在哪些崩潰,然后對癥下藥,解決崩潰。那么鴻蒙應用中存在哪些崩潰類型呢?又改如何解決…

分析K8S中Node狀態為`NotReady`問題

在Kubernetes(k8s)集群中,Node狀態為NotReady通常意味著節點上存在某些問題,下面為你分析正常情況下節點應運行的容器以及解決NotReady狀態的方法。 正常情況下Node節點應運行的容器 1. kubelet kubelet是節點上的核心組件&…

第六屆機電一體化技術與智能制造國際學術會議(ICMTIM 2025)

重要信息 4月11-13日 南京江北新區工業大學亞朵酒店 www.icmtim.org(點擊了解參會投稿等) 簡介 由南京工業大學主辦,南京工業大學電氣工程與控制科學學院、中國礦業大學、黑龍江大學、江蘇省自動化學會承辦的第六屆機電一體化技術…

INT202 Complexity of Algroithms 算法的復雜度 Pt.2 Search Algorithm 搜索算法

文章目錄 1.樹的數據結構1.1 有序數據(Ordered Data)1.1.1 有序字典(Ordered Dictonary)1.1.1.1 排序表(Sorted Tables) 1.2 二分查找(Binary Search)1.2.1 二分查找的時間復雜度 1.3 二叉搜索樹&#xff0…

【AVRCP】藍牙鏈路控制器(LC)與AVRCP互操作性要求深度解析

目錄 一 、Link Controller(LC)概述 1.1 LC的定義與功能 1.2 LC在藍牙技術中的重要性 二、Link Controller(LC)互操作性要求 2.1 互操作性要求概述 2.2 物理層互操作性要求 2.3 鏈路管理互操作性要求 2.4 其他互操作性要求…

高級背景摳圖工具(python)

這是一個專業的圖像背景處理工具,基于Python開發,主要功能包括:1. 智能背景去除 - 使用rembg庫的深度學習模型自動識別并移除圖片背景。 2. 背景自定義 - 支持純色背景替換,保留透明通道(Alpha通道)。3. 高級參數調節 - 提供5種專業級圖像處理參數。4. 實時預覽 - 雙窗口…

如何設計外貿郵件開發信主題

開發信是打開客戶大門的第一步,而郵件主題則是決定客戶是否打開郵件的關鍵。一個吸引人的主題不僅能提高打開率,還能為后續溝通打下良好基礎。 一、突出價值和利益 郵件主題要直接傳達收件人能從中獲得的價值和利益,引起他們的興趣和關注。…

wordpress表單插件CF7調用方式

Contact Form 7(CF7)是WordPress中非常流行的表單插件,以下是其常見的調用方式: 通過短代碼調用 在頁面或文章編輯器中添加:完成表單設置后,復制表單對應的短代碼,然后在需要顯示表單的頁面或文章的編輯器中直接粘貼…

快速入手-基于Django的主子表間操作mysql(五)

1、如果該表中存在外鍵,結合實際業務情況,那可以這么寫: 2、針對特殊的字典類型,可以這么定義 3、獲取元組中的字典值和子表中的value值方法 4、對應的前端頁面寫法

網絡運維學習筆記(DeepSeek優化版) 021 HCIA-Datacom新增知識點03園區網典型組網架構及案例實戰

文章目錄 園區網典型組網架構及案例實戰1 園區網定義2 園區網絡典型架構3 各層級協議與技術4 項目生命周期管理5 小型園區網絡設計框架5.1 組網方案設計5.2 IP地址規劃5.3 園區內部的路由設計5.4 NAT設計5.5 WLAN設計5.6 安全設計5.7 運維管理設計 6 小型園區的實施方案與運維手…

1.8 函數的連續性和間斷點

1.連續的定義 2.間斷點的定義 3.間斷點的分類

基于Arm GNU Toolchain編譯生成的.elf轉hex/bin文件格式方法

基于Arm GNU Toolchain編譯生成的.elf轉hex/bin文件格式方法 已經棄用的版本(Version 10.3-2021.10):gcc-arm-none-eabi:https://developer.arm.com/downloads/-/gnu-rmArm GNU Toolchain當前版本:https://developer.a…

希爾排序中的Hibbard序列

一 定義 Hibbard序列的每個元素由以下公式生成: h_k = 2^k - 1 其中k從1開始遞增,序列為:1, 3, 7, 15, 31, 63, … 二 生成方式 起始條件:k=1,對應h_1=2^1-1=1 遞推公式:每次k增加1,計算 h_{k+1}=2^{k+1}-1 示例:前5項…

失敗的面試經歷(??∧??)

一.面向對象的三大特性 1.封裝:將對象內部的屬性私有化,外部對象不能夠直接訪問,但是可以提供一些可以使外部對象操作內部屬性的方法。 2.繼承:類與類之間會有一些相似之處,但也會有一些異處,使得他們與眾…