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版本如图
更多关于HarmonyOS 鸿蒙Next中web组件onClientAuthenticationRequest模拟器中无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
尊敬的开发者,您好!当前模拟器尚不支持安全证书类功能,对于您的问题已受理,请您耐心等待,感谢您的理解与支持!
更多关于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客户端认证请求无法正常传递到应用层。
建议的临时解决方案:
- 开发调试阶段使用真机进行客户端证书认证功能测试
- 在模拟器中暂时绕过需要客户端证书认证的页面
- 关注后续DevEco Studio版本更新,该问题可能在未来的模拟器版本中得到修复
当前代码实现符合官方文档规范,问题根源在于模拟器运行环境的限制。