# OnlineAuthenticationkit_sample_FIDO2Clientdemo_cpp
**Repository Path**: harmonyos_samples/online-authenticationkit_sample_fido2clientdemo_cpp
## Basic Information
- **Project Name**: OnlineAuthenticationkit_sample_FIDO2Clientdemo_cpp
- **Description**: 本示例主要展示通行密钥的移动端的线上快速身份认证能力。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-07-09
- **Last Updated**: 2025-09-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 基于在线认证服务实现通行密钥功能(C++)
## 介绍
本示例展示了通行密钥服务提供的C++ API的使用方法,可实现基于FIDO2协议的通行密钥注册、本地免密认证和跨设备扫码认证能力。
1. 通行密钥注册:支持使用用户身份认证特征(如人脸、指纹、PIN码)作为平台认证器,在本设备上创建应用或网页的通行密钥。
2. 本地免密认证:支持使用用户身份认证特征(如人脸、指纹、PIN码)作为平台认证器,使用通行密钥在本设备上进行应用或网页的免密认证。
3. 跨设备扫码认证:支持使用已注册通行密钥的移动设备作为漫游认证器,使用跨设备扫码的方式,在其他设备上进行应用或网页的免密认证。
## 效果预览
| 应用主页 | 接口使用按钮 |
|---------------------------------------------------------| -------------- |
| 应用主页显示在设备屏幕 | 点击接口测试按钮调用接口 |
|
|
|
## 工程目录
```
├── entry/src/main/cpp
│ ├── hcts // native C++调用FIDO2NDK代码
│ │ ├── include // 头文件
│ │ │ ├── fido2_serializer.h // fido2报文与结构体互转头文件
│ │ │ ├── fido2_test.h // 函数导出头文件
│ │ │ └── log.h // 日志打印的头文件
│ │ └── src
│ │ │ ├── connect_service.cpp // 调用FIDO2NDK的实现
│ │ │ └── fido2_serializer.cpp // fido2报文与结构体互转的实现
│ ├── third_party // nlohmann三方库
│ │ └── include/nlohmann // nlohmann三方库
│ ├── types/libentry/ //
│ │ ├── Index.d.ts // 声明C++方法
│ │ └── oh-package.json5 // 声明依赖
│ ├── CMakeLists.txt // 链接libfido2_ndk.z.so动态库
│ └── napi_init.cpp // NAPI适配层
└── entry/src/main/ets
├── Pages // 连接FIDO服务器,获取注册、认证、注销报文
│ └── Index.ets // 程序入口类
└── server
├── Fido2NetUtil.ets // 连接服务器工具类
├── ServerAuthenticationExtensionsClientOutputs.ets // 用于构造注册参数的数据结构类
├── ServerAuthenticatorAssertionResponse.ets // 用于构造认证响应参数的数据结构类
├── ServerAuthenticatorAttestationResponse.ets // 用于构造注册参数的数据结构类
├── ServerPublicKeyCredentialCreation.ets // 用于构造注册响应参数的数据结构类
├── ServerPublicKeyCredentialCreationOptions.ets // 用于构造注册参数pkOptions的数据结构类
├── ServerPublicKeyCredentialDescriptor.ets // 用于构造注册参数的数据结构类
├── ServerPublicKeyCredentialRequest.ets // 用于构造认证请求参数的数据结构类
├── ServerPublicKeyCredentialRequestOptions.ets // 用于构造认证请求参数的数据结构类
└── ServerPublicKeyCredentialUserEntity.ets // 用于构造注册参数pkOptions数据结构类
```
## 使用说明
1. 运行前需修改并指定服务器地址(entry/src/main/ets/server/Fido2NetUtil.ets);
2. 在主界面,每次使用通行密钥功能之前,需要首先点击【获取能力列表】查看客户端当前是否支持该功能;
3. 点击【获取平台认证器能力】查看支持的平台身份验证器列表;
4. 点击【注册】进行注册,页面弹出弹窗提示注册成功;
5. 注册后,点击【认证】进行认证,页面弹出弹窗提示认证成功;
## 具体实现(接口参考@hms.security.fido2)
业务使用时,需要先进行导入如下通行密钥API:
* FIDO2_ErrorCode HMS_FIDO2_getClientCapability()(FIDO2_CapabilityArray ** capability);
* FIDO2_ErrorCode HMS_FIDO2_getPlatformAuthenticator()(FIDO2_AuthenticatorMetadataArray **authenticators);
* FIDO2_ErrorCode HMS_FIDO2_register()(const FIDO2_CredentialCreationOptions options,const FIDO2_TokenBinding tokenBinding,const char * origin,FIDO2_PublicKeyAttestationCredential ** publicKeyAttestationCredential );
* FIDO2_ErrorCode HMS_FIDO2_authenticate()(const FIDO2_CredentialRequestOptions options,const FIDO2_TokenBinding tokenBinding,const char *origin,FIDO2_PublicKeyAssertionCredential **publicKeyAssertionCredential);
具体用例请参考Index.ets。
## 相关权限
1. 获取通行密钥服务权限:ohos.permission.ACCESS_FIDO2_ONLINEAUTH。
## 依赖
不涉及
## 约束与限制
1. 本示例仅支持标准系统上运行,支持设备:华为手机、平板、2in1;
2. 本示例需要使用DevEco Studio 6.0.0 Release才可编译运行;
3. HarmonyOS系统:HarmonyOS 6.0.0 Release及以上;
4. HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上;
5. 若使用人脸认证功能,设备须支持3D人脸;
6. 开发者的业务需要接入符合FIDO2标准的协议,并部署符合FIDO2标准协议的FIDO服务端,通行密钥服务接口仅提供FIDO2客户端能力,无法独立进行开启/认证服务;Fido2NetUtil.ets提供连云服务模板,如需连云请通过修改服务器url地址接入云端服务器。