文档管理中心
指南系统安全Online Authentication Kit(在线认证服务)免密认证通行密钥通行密钥身份认证(C/C++)

通行密钥身份认证(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脚本中链接相关动态库。

收起
自动换行
深色代码主题
复制
  1. target_link_libraries(projectName libfido2_ndk.z.so)
  1. 需要业务方自行根据FIDO2标准协议部署FIDO服务器。

  2. 注册通行密钥。

    1. 获取能力信息,调用HMS_FIDO2_getClientCapability接口获取客户端能力列表,并且调用HMS_FIDO2_getPlatformAuthenticator接口获取平台认证器能力信息。
      收起
      自动换行
      深色代码主题
      复制
      1. #include "OnlineAuthenticationKit/fido2_api.h"
      2. FIDO2_ErrorCode TestGetClientCapability()
      3. {
      4. // 获取客户端能力列表
      5. FIDO2_CapabilityArray *capability = NULL;
      6. FIDO2_ErrorCode ret = HMS_FIDO2_getClientCapability(&capability);
      7. // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考
      8. if (ret != FIDO2_SUCCESS) {
      9. HMS_FIDO2_CapabilityArray_Destroy(capability);
      10. return ret;
      11. }
      12. return FIDO2_SUCCESS;
      13. }
      14. FIDO2_ErrorCode GetPlatformAuthenticator()
      15. {
      16. // 获取平台认证器能力
      17. FIDO2_AuthenticatorMetadataArray *authenticators = NULL;
      18. FIDO2_ErrorCode ret = HMS_FIDO2_getPlatformAuthenticator(&authenticators);
      19. // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考
      20. if (ret != FIDO2_SUCCESS) {
      21. HMS_FIDO2_AuthenticatorMetadataArray_Destroy(authenticators);
      22. return ret;
      23. }
      24. return FIDO2_SUCCESS;
      25. }
    2. 访问FIDO服务器,获取注册报文,调用HMS_FIDO2_register接口进行注册。
      收起
      自动换行
      深色代码主题
      复制
      1. FIDO2_ErrorCode TestReg()
      2. {
      3. // 初始化注册参数,init方法必须调用
      4. FIDO2_CredentialCreationOptions options;
      5. HMS_FIDO2_initCreationOptions(&options);
      6. // FIDO服务器返回的注册报文,具体报文内容由业务方传入
      7. FIDO2_PublicKeyCredentialCreationOptions publicKey;
      8. // 业务方组装注册信息,包含是否需要用户介入以及注册报文
      9. options.mediation = FIDO2_CONDITIONAL;
      10. options.publicKey = publicKey;
      11. // 初始化tokenBinding参数,业务方可不赋值,但init方法必须调用
      12. FIDO2_TokenBinding tokenBinding;
      13. HMS_FIDO2_initTokenBinding(&tokenBinding);
      14. // 测试origin,具体内容由业务方设置
      15. char *origin = "http://www.fidotest.com";
      16. // 调用HMS_FIDO2_register进行通行密钥注册
      17. FIDO2_PublicKeyAttestationCredential* publicKeyAttestationCredential = NULL;
      18. FIDO2_ErrorCode ret = HMS_FIDO2_register(options, tokenBinding, origin, &publicKeyAttestationCredential);
      19. // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考
      20. if (ret != FIDO2_SUCCESS) {
      21. HMS_FIDO2_PublicKeyAttestationCredential_Destroy(publicKeyAttestationCredential);
      22. return ret;
      23. }
      24. return FIDO2_SUCCESS;
      25. }
    3. 应用使用注册结果(publicKeyAttestationCredential)组装注册响应报文,发送至FIDO服务端进行验证,获取注册结果报文。
  3. 使用通行密钥进行身份认证。

    1. 获取能力信息,调用HMS_FIDO2_getClientCapability接口获取客户端能力列表,并且调用HMS_FIDO2_getPlatformAuthenticator接口获取平台认证器能力信息。
      收起
      自动换行
      深色代码主题
      复制
      1. #include "OnlineAuthenticationKit/fido2_api.h"
      2. FIDO2_ErrorCode TestGetClientCapability()
      3. {
      4. // 获取客户端能力列表
      5. FIDO2_CapabilityArray *capability = NULL;
      6. FIDO2_ErrorCode ret = HMS_FIDO2_getClientCapability(&capability);
      7. // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考
      8. if (ret != FIDO2_SUCCESS) {
      9. HMS_FIDO2_CapabilityArray_Destroy(capability);
      10. return ret;
      11. }
      12. return FIDO2_SUCCESS;
      13. }
      14. FIDO2_ErrorCode GetPlatformAuthenticator()
      15. {
      16. // 获取平台认证器能力
      17. FIDO2_AuthenticatorMetadataArray *authenticators = NULL;
      18. FIDO2_ErrorCode ret = HMS_FIDO2_getPlatformAuthenticator(&authenticators);
      19. // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考
      20. if (ret != FIDO2_SUCCESS) {
      21. HMS_FIDO2_AuthenticatorMetadataArray_Destroy(authenticators);
      22. return ret;
      23. }
      24. return FIDO2_SUCCESS;
      25. }
    2. 访问FIDO服务器,获取认证报文,调用HMS_FIDO2_authenticate接口进行认证。
      收起
      自动换行
      深色代码主题
      复制
      1. FIDO2_ErrorCode TestAuth()
      2. {
      3. // 初始化认证参数,init方法必须调用
      4. FIDO2_CredentialRequestOptions options;
      5. HMS_FIDO2_initRequestOptions(&options);
      6. // FIDO服务器返回的认证报文,具体报文内容由业务方传入
      7. FIDO2_PublicKeyCredentialRequestOptions publicKey;
      8. // 业务方组装认证信息,包含是否需要用户介入以及认证报文
      9. options.mediation = FIDO2_CONDITIONAL;
      10. options.publicKey = publicKey;
      11. // 初始化tokenBinding参数,业务方可不赋值,但init方法必须调用
      12. FIDO2_TokenBinding tokenBinding;
      13. HMS_FIDO2_initTokenBinding(&tokenBinding);
      14. // 测试origin,具体内容由业务方设置
      15. char *origin = "http://www.fidotest.com";
      16. // 调用HMS_FIDO2_authenticate进行通行密钥认证
      17. FIDO2_PublicKeyAssertionCredential *assertionCredential = NULL;
      18. FIDO2_ErrorCode ret = HMS_FIDO2_authenticate(options, tokenBinding, origin, &assertionCredential);
      19. // 业务根据错误码判断异常类型,进行相应处理,详见错误码参考
      20. if (ret != FIDO2_SUCCESS) {
      21. HMS_FIDO2_PublicKeyAssertionCredential_Destroy(assertionCredential);
      22. return ret;
      23. }
      24. return FIDO2_SUCCESS;
      25. }
    3. 应用使用认证结果(assertionCredential)组装认证响应报文,发送至FIDO服务端进行验证,获取认证结果报文。
在 指南 中进行搜索
请输入您想要搜索的关键词