通行密钥身份认证(C/C++)
接口说明
通行密钥服务主要接口如下表。
| 接口名 | 描述 |
|---|---|
| FIDO2_ErrorCode HMS_FIDO2_getClientCapability(FIDO2_CapabilityArray ** capability) | 查询当前设备支持的客户端能力列表。 |
| FIDO2_ErrorCode HMS_FIDO2_getPlatformAuthenticator(FIDO2_AuthenticatorMetadataArray **authenticators) | 查询当前设备支持的平台认证器能力列表(人脸、指纹、PIN码)。 |
| 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) | 进行通行密钥的认证。 |
开发步骤
通行密钥服务提供基于FIDO2标准协议的FIDO客户端实现,这里仅演示FIDO客户端相关API的使用,涉及FIDO服务器的相关处理由开发者自行实现,这里不做介绍,请参考FIDO2标准协议(见网站链接免责声明)。
在CMake脚本中链接相关动态库。
target_link_libraries(projectName libfido2_ndk.z.so)
-
需要业务方自行根据FIDO2标准协议部署FIDO服务器。
-
注册通行密钥。
-
获取能力信息,调用HMS_FIDO2_getClientCapability接口获取客户端能力列表,并且调用HMS_FIDO2_getPlatformAuthenticator接口获取平台认证器能力信息。
#include "OnlineAuthenticationKit/fido2_api.h"FIDO2_ErrorCode TestGetClientCapability(){// 获取客户端能力列表FIDO2_CapabilityArray *capability = NULL;FIDO2_ErrorCode ret = HMS_FIDO2_getClientCapability(&capability);// 业务根据错误码判断异常类型,进行相应处理,详见错误码参考if (ret != FIDO2_SUCCESS) {HMS_FIDO2_CapabilityArray_Destroy(capability);return ret;}return FIDO2_SUCCESS;}FIDO2_ErrorCode GetPlatformAuthenticator(){// 获取平台认证器能力FIDO2_AuthenticatorMetadataArray *authenticators = NULL;FIDO2_ErrorCode ret = HMS_FIDO2_getPlatformAuthenticator(&authenticators);// 业务根据错误码判断异常类型,进行相应处理,详见错误码参考if (ret != FIDO2_SUCCESS) {HMS_FIDO2_AuthenticatorMetadataArray_Destroy(authenticators);return ret;}return FIDO2_SUCCESS;} -
访问FIDO服务器,获取注册报文,调用HMS_FIDO2_register接口进行注册。
FIDO2_ErrorCode TestReg(){// 初始化注册参数,init方法必须调用FIDO2_CredentialCreationOptions options;HMS_FIDO2_initCreationOptions(&options);// FIDO服务器返回的注册报文,具体报文内容由业务方传入FIDO2_PublicKeyCredentialCreationOptions publicKey;// 业务方组装注册信息,包含是否需要用户介入以及注册报文options.mediation = FIDO2_CONDITIONAL;options.publicKey = publicKey;// 初始化tokenBinding参数,业务方可不赋值,但init方法必须调用FIDO2_TokenBinding tokenBinding;HMS_FIDO2_initTokenBinding(&tokenBinding);// 测试origin,具体内容由业务方设置char *origin = "http://www.fidotest.com";// 调用HMS_FIDO2_register进行通行密钥注册FIDO2_PublicKeyAttestationCredential* publicKeyAttestationCredential = NULL;FIDO2_ErrorCode ret = HMS_FIDO2_register(options, tokenBinding, origin, &publicKeyAttestationCredential);// 业务根据错误码判断异常类型,进行相应处理,详见错误码参考if (ret != FIDO2_SUCCESS) {HMS_FIDO2_PublicKeyAttestationCredential_Destroy(publicKeyAttestationCredential);return ret;}return FIDO2_SUCCESS;} -
应用使用注册结果(publicKeyAttestationCredential)组装注册响应报文,发送至FIDO服务端进行验证,获取注册结果报文。
-
-
使用通行密钥进行身份认证。
-
获取能力信息,调用HMS_FIDO2_getClientCapability接口获取客户端能力列表,并且调用HMS_FIDO2_getPlatformAuthenticator接口获取平台认证器能力信息。
#include "OnlineAuthenticationKit/fido2_api.h"FIDO2_ErrorCode TestGetClientCapability(){// 获取客户端能力列表FIDO2_CapabilityArray *capability = NULL;FIDO2_ErrorCode ret = HMS_FIDO2_getClientCapability(&capability);// 业务根据错误码判断异常类型,进行相应处理,详见错误码参考if (ret != FIDO2_SUCCESS) {HMS_FIDO2_CapabilityArray_Destroy(capability);return ret;}return FIDO2_SUCCESS;}FIDO2_ErrorCode GetPlatformAuthenticator(){// 获取平台认证器能力FIDO2_AuthenticatorMetadataArray *authenticators = NULL;FIDO2_ErrorCode ret = HMS_FIDO2_getPlatformAuthenticator(&authenticators);// 业务根据错误码判断异常类型,进行相应处理,详见错误码参考if (ret != FIDO2_SUCCESS) {HMS_FIDO2_AuthenticatorMetadataArray_Destroy(authenticators);return ret;}return FIDO2_SUCCESS;} -
访问FIDO服务器,获取认证报文,调用HMS_FIDO2_authenticate接口进行认证。
FIDO2_ErrorCode TestAuth(){// 初始化认证参数,init方法必须调用FIDO2_CredentialRequestOptions options;HMS_FIDO2_initRequestOptions(&options);// FIDO服务器返回的认证报文,具体报文内容由业务方传入FIDO2_PublicKeyCredentialRequestOptions publicKey;// 业务方组装认证信息,包含是否需要用户介入以及认证报文options.mediation = FIDO2_CONDITIONAL;options.publicKey = publicKey;// 初始化tokenBinding参数,业务方可不赋值,但init方法必须调用FIDO2_TokenBinding tokenBinding;HMS_FIDO2_initTokenBinding(&tokenBinding);// 测试origin,具体内容由业务方设置char *origin = "http://www.fidotest.com";// 调用HMS_FIDO2_authenticate进行通行密钥认证FIDO2_PublicKeyAssertionCredential *assertionCredential = NULL;FIDO2_ErrorCode ret = HMS_FIDO2_authenticate(options, tokenBinding, origin, &assertionCredential);// 业务根据错误码判断异常类型,进行相应处理,详见错误码参考if (ret != FIDO2_SUCCESS) {HMS_FIDO2_PublicKeyAssertionCredential_Destroy(assertionCredential);return ret;}return FIDO2_SUCCESS;} -
应用使用认证结果(assertionCredential)组装认证响应报文,发送至FIDO服务端进行验证,获取认证结果报文。
-