HarmonyOS 鸿蒙Next中web组件onClientAuthenticationRequest模拟器中无效

HarmonyOS 鸿蒙Next中web组件onClientAuthenticationRequest模拟器中无效

import { webview } from '@kit.ArkWeb';
import { common } from '@kit.AbilityKit';
import { certificateManager } from '@kit.DeviceCertificateKit';
import { BusinessError } from '@kit.BasicServicesKit';


@Entry
@Component
struct Index {
  authUri = ''
  private readonly controller: webview.WebviewController = new webview.WebviewController();

  aboutToAppear(): void {
    webview.WebviewController.setWebDebuggingAccess(true)
    webview.WebviewController.setRenderProcessMode(webview.RenderProcessMode.MULTIPLE)
    const ctx = this.getUIContext().getHostContext() as common.UIAbilityContext
    let value = ctx.resourceManager.getRawFileContentSync("www/client.p12");
    certificateManager.installPrivateCertificate(value, "mypwd", "aliasname").then(data => {
      console.info(`installPrivateCertificate, uri==========${JSON.stringify(data.uri)}`)
      this.authUri = data.uri || ''
    }, (e: BusinessError) => {
      e
    })
  }

  build() {
    RelativeContainer() {
      Web({ src: $rawfile('www/index.html'), controller: this.controller })
        .onControllerAttached(() => {
          setTimeout(() => {
            this.controller.loadUrl('https://xxx/abc')
          }, 2000)
        })
        .onClientAuthenticationRequest((event) => {
          // 模拟器中处理无效 也没有明显报错
          event.handler.confirm(this.authUri)
        })
        .onSslErrorEvent((event: SslErrorEvent) => {
          event.handler.handleConfirm();
        })
    }
    .height('100%')
    .width('100%')
  }
}

我参考示例中的代码处理web组件加载某些请求时候收到的SSL客户端证书请求事件,测试发现真机没有问题,使用mate60pro 5.0.5(api17)可以正常加载请求,但是在模拟器上无法正常工作,尝试了api 13/15/17都不行

DevEco-Studio版本如图

cke_169685.png


更多关于HarmonyOS 鸿蒙Next中web组件onClientAuthenticationRequest模拟器中无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

尊敬的开发者,您好!当前模拟器尚不支持安全证书类功能,对于您的问题已受理,请您耐心等待,感谢您的理解与支持!

更多关于HarmonyOS 鸿蒙Next中web组件onClientAuthenticationRequest模拟器中无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢,希望尽快开发支持一下,起初还以为代码写的有问题!

.onErrorReceive((event) => {
  if (event) {
    console.log('getErrorInfo:' + event.error.getErrorInfo());
    console.log('getErrorCode:' + event.error.getErrorCode());
    console.log('url:' + event.request.getRequestUrl());
    console.log('isMainFrame:' + event.request.isMainFrame());
    console.log('isRedirect:' + event.request.isRedirect());
    console.log('isRequestGesture:' + event.request.isRequestGesture());
    console.log('getRequestHeader_headerKey:' + event.request.getRequestHeader().toString());
    let result = event.request.getRequestHeader();
    console.log('The request header result size is ' + result.length);
    for (let i of result) {
      console.log('The request header key is : ' + i.headerKey + ', value is : ' + i.headerValue);
    }
  }
})

报错这这里

在HarmonyOS Next中,web组件的onClientAuthenticationRequest回调在模拟器环境中可能因平台差异无法正常触发。该问题通常与模拟器的SSL/TLS证书处理机制有关,部分系统级认证请求在虚拟环境中被拦截或忽略。建议检查DevEco Studio模拟器的网络配置选项,确认是否启用了完整的客户端证书支持。部分鸿蒙模拟器版本存在已知的Web认证限制,可尝试切换至真机调试环境进行功能验证。

在HarmonyOS Next模拟器环境中,web组件的onClientAuthenticationRequest事件确实存在兼容性问题。根据当前测试结果,该功能在真机(如Mate60Pro API17)上工作正常,但在所有API版本的模拟器上均无法触发。

这主要是由于模拟器的系统证书管理机制与真机存在差异。模拟器环境可能缺少完整的客户端证书验证流程支持,导致SSL客户端认证请求无法正常传递到应用层。

建议的临时解决方案:

  1. 开发调试阶段使用真机进行客户端证书认证功能测试
  2. 在模拟器中暂时绕过需要客户端证书认证的页面
  3. 关注后续DevEco Studio版本更新,该问题可能在未来的模拟器版本中得到修复

当前代码实现符合官方文档规范,问题根源在于模拟器运行环境的限制。

回到顶部