ToB企服应用市场:ToB评测及商务社交产业平台
标题:
华为HarmonyOS帮助应用实现在线认证服务 -- 2 FIDO免密身份认证
[打印本页]
作者:
泉缘泉
时间:
2024-12-19 05:59
标题:
华为HarmonyOS帮助应用实现在线认证服务 -- 2 FIDO免密身份认证
场景介绍
开通FIDO免密身份认证功能,使用用户已有的生物特性开通FIDO免密身份认证能力。
使用FIDO免密身份认证功能,使用用户已开通的生物特性举行FIDO免密身份认证。
关闭FIDO免密身份认证功能,使用用户已开通的生物特性注销FIDO免密身份认证能力。
基本概念
在开辟FIDO免密身份认证功能前,开辟者应了解以下基本概念:
FIDO协议 FIDO(Fast Identity Online)是一套身份认证框架协议,它由FIDO联盟推出并持续维护。FIDO规范定义了一套在线身份认证的技能架构。
UAF身份认证框架 UAF(Universal Authentication Framework)意为通用身份认证框架,目的是通过生物识别(如指纹识别)和加密技能方式,为用户提供无暗码的身份认证体验。
束缚与限制
需满意以下条件,才能使用该功能。
移动端设备需要支持生物特性(指纹/3D人脸)。
FIDO服务需要联网,以便提供完整的在线身份校验服务。应用在调用本服务API前,需将FIDO服务联网行为向用户明示,并且取得用户同意。
接口说明
业务举行FIDO免密身份认证功能的开通、使用和关闭。
表1
FIDO免密身份认证接口功能介绍 接口名
描述
discover(context: common.Context): Promise<DiscoveryData>
发现设备的认证能力,返回当前设备软件支持的认证器数据
checkPolicy(context: common.Context, uafRequest: UAFMessage): Promise<void>
检测用户战略的开启状态
processUAFOperation(context: common.Context, uafRequest: UAFMessage, channelBindings?: ChannelBinding): Promise<UAFMessage>
用户UAF操作接口,处理UAF协议消息
notifyUAFResult(context: common.Context, uafResponse: UAFMessage): Promise<void>
开通效果关照接口
开辟步调
需要业务方自行根据FIDO标准协议部署FIDO服务器。
导入相关模块。
[/code][list=1]
[*]import { fido } from '@kit.OnlineAuthenticationKit';
[*]import { BusinessError } from '@ohos.base';
[/list]
[*]开通FIDO免密身份认证。[list=1]
[*]初始化认证器信息。 [code]
复制代码
// 使用this.uiContext需要获取页面UIAbility的Context,一个页面获取一次即可
//
方法:uiContext:common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
try {
// 调用discover方法初始化认证器信息
let discoverData = await fido.discover(this.uiContext);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to call discover. Code is ${err.code}, message is ${err.message}`);
// 业务根据错误码判断异常类型,举行相应处理
}
访问FIDO服务端,获取战略检查报文,检查用户开通状态。
[/code][list=1]
[*]// uafMessage为FIDO服务端获取的战略检查报文
[*]let uafAuthMessage: fido.UAFMessage = {
[*]uafProtocolMessage: uafMessage, // 从服务端获取的检查战略报文
[*]additionalData: "" // 附加信息(可选)
[*]};
[*]let isRegistered: boolean = true;
[*]try {
[*]// 检查是否已经开启FIDO认证
[*]await fido.checkPolicy(this.uiContext, uafAuthMessage);
[*]} catch (error) {
[*]isRegistered = false;
[*]const err: BusinessError = error as BusinessError;
[*]console.error(`Failed to call checkPolicy. Code is ${err.code}, message is ${err.message}`);
[*]// 业务根据错误码判断状态,举行相应处理
[*]}
[*]if (isRegistered) {
[*]console.info("has registered, no need to register again.");
[*]// 已注册,业务根据需要执行后续流程
[*]}
[/list]
[*]访问FIDO服务端,获取注册报文,调用processUAFOperation接口举行FIDO注册。 [code]
复制代码
// regMessage为从FIDO服务端获取的注册报文
let uafRegMessage: fido.UAFMessage = {
uafProtocolMessage: regMessage, // 从服务端获取的注册报文
additionalData: "" // 附加信息(可选)
};
// 传连接通道参数(可选)
let channelBinding: fido.ChannelBinding = {};
try {
// 调用processUAFOperation接口举行FIDO注册
let messageResp = await fido.processUAFOperation(this.uiContext, uafRegMessage, channelBinding);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to call processUAFOperation. Code is ${err.code}, message is ${err.message}`);
// 业务根据错误码判断异常类型,举行相应处理
}
发送注册响应报文至FIDO服务端举行验证并获取注册效果报文。
[/code][list=1]
[*]// notifyMessage为从FIDO服务端获取的注册效果报文
[*]let notifyMessage:string = "";
[*]let notifyUafMessage: fido.UAFMessage = {
[*]uafProtocolMessage: notifyMessage, // 从服务端获取的注册效果报文
[*]additionalData: "" // 附加信息(可选)
[*]};
[/list]
[*]调用notifyUAFResult举行注册效果关照。 [code]
复制代码
try {
// 调用notifyUAFResult举行注册效果关照
fido.notifyUAFResult(this.uiContext, notifyUafMessage).then(notify => {
console.info("Succeeded in doing notifyUAFResult.");
})
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to call notifyUAFResult. Code is ${err.code}, message is ${err.message}`);
// 业务根据错误码判断异常类型,举行相应处理
}
使用FIDO免密身份认证。
初始化认证器信息(如果已执行过初始化操作,则无需重复执行)。
[/code][list=1]
[*]// 获取当前界面的context
[*]try {
[*]// 调用discover方法初始化认证器信息
[*]let discoverData = await fido.discover(this.uiContext);
[*]} catch (error) {
[*]const err: BusinessError = error as BusinessError;
[*]console.error(`Failed to call discover. Code is ${err.code}, message is ${err.message}`);
[*]// 业务根据错误码判断异常类型,举行相应处理
[*]}
[/list]
[*]访问FIDO服务端,获取战略检查报文,检查用户开启状态。 [code]
复制代码
// uafMessage为从FIDO服务器获取的战略检查报文
let uafAuthMessage: fido.UAFMessage = {
uafProtocolMessage: uafMessage, // 从服务端获取的检查战略报文
additionalData: "" // 附加信息(可选)
};
let isRegistered: boolean = true;
try {
// 检查是否已经开启FIDO认证
await fido.checkPolicy(this.uiContext, uafAuthMessage);
} catch (error) {
isRegistered = false;
const err: BusinessError = error as BusinessError;
console.error(`Failed to call checkPolicy. Code is ${err.code}, message is ${err.message}`);
// 业务根据错误码判断状态,举行相应处理
}
if (isRegistered) {
console.info("has registered, no need to register again.");
// 已注册,业务根据需要执行后续流程
}
访问FIDO服务端,获取认证报文,调用processUAFOperation接口举行FIDO认证。
[/code][list=1]
[*]// regMessage为从FIDO服务器获取的认证报文
[*]let uafRegMessage: fido.UAFMessage = {
[*]uafProtocolMessage: regMessage, // 从服务端获取的认证报文
[*]additionalData: "" // 附加信息(可选)
[*]};
[*]// 传连接通道参数(可选)
[*]let channelBinding: fido.ChannelBinding = {};
[*]try {
[*]// 调用processUAFOperation接口举行FIDO认证
[*]let messageResp = await fido.processUAFOperation(this.uiContext, uafRegMessage, channelBinding);
[*]} catch (error) {
[*]const err: BusinessError = error as BusinessError;
[*]console.error(`Failed to call processUAFOperation. Code is ${err.code}, message is ${err.message}`);
[*]// 业务根据错误码判断异常类型,举行相应处理
[*]}
[*]//发送认证响应报文至FIDO服务端举行验证并返回认证效果
[/list]
[/list]
[*]关闭FIDO免密身份认证。[list=1]
[*]初始化认证器信息(如果已执行过初始化操作,则无需重复执行)。 [code]
复制代码
try {
// 调用discover方法初始化认证器信息
let discoverData = await fido.discover(this.uiContext);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to call discover. Code is ${err.code}, message is ${err.message}`);
// 业务根据错误码判断异常类型,举行相应处理
}
访问FIDO服务端,获取注销报文,调用processUAFOperation接口举行FIDO注销。 [code][/code]
// deregMessage为从FIDO服务器获取的注销报文
let uafRegMessage: fido.UAFMessage = {
uafProtocolMessage: deregMessage, // 从服务端获取的注销报文
additionalData: "" // 附加信息(可选)
};
// 传连接通道参数(可选)
let channelBinding: fido.ChannelBinding = {};
try {
// 调用processUAFOperation接口举行FIDO注销
let messageResp = await fido.processUAFOperation(this.uiContext, uafRegMessage, channelBinding);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to call processUAFOperation. Code is ${err.code}, message is ${err.message}`);
// 业务根据错误码判断异常类型,举行相应处理
}
//发送认证响应报文至FIDO服务端举行验证并返回认证效果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4