HarmonyOS 鸿蒙Next webview进行双向认证的问题
HarmonyOS 鸿蒙Next webview进行双向认证的问题
在迁移安卓用户凭证相关代码的时候遇到了一些问题,求大佬解惑
1、webview在onClientAuthenticationRequest(request)的时候需要客户端对用户凭证进行解析,我找了一下webview的文档发现有一个demo能够实现通过文件选择的方式去回调request.handler.confirm(uri)的方式,但是debug的时候并没有任何效果且看不到错误日志,(onClientAuthenticationRequest的demo)。所以就想用request.handler.confirm(priKeyFile,certChainFile)的方式解决,但是我并没有找到怎么获取这两个参数的方式,求大佬解惑
2、迁移的时候发现harmony没有类似KeyChain的东西。我们这边在安卓里是通过下面的方式和webview的onReceivedClientCertRequest(view, request)交互的
val privateKey = KeyChain.getPrivateKey(currentActivity, alias)
val certificateChain = KeyChain.getCertificateChain(currentActivity, alias)
request.proceed(privateKey, chain)
我找了下文档,看到了certManager的一些方法,但是似乎都没有能对应上面代码的替换方案
1、使用onClientAuthenticationRequest方法,也可以在onSslErrorEventReceive函数中调用event.handler.handleConfirm()函数达到忽略ssl证书的效果
onClientAuthenticationRequest可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onclientauthenticationrequest9
onSslErrorEventReceive可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onsslerroreventreceive9
2、HarmonyOS可以参考这个:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/asset-store-kit-overview-0000001816916898
我现在使用的就是onClientAuthenticationRequest实现双向认证的那个demo,但是报错的回调方法不是onSslErrorEventReceive,就只有onErrorReceive,哈哈哈 而且我的用户凭证的uri已经给到event.handler.confirm()方法了,但是还是会出现ERR_SSL_CLIENT_AUTH_CERT_NEEDED这个错误,很奇怪
let authUri: string | undefined = undefined
try {
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT | bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
const data = await bundleManager.getBundleInfoForSelf(bundleFlags)
const appUid = data.appInfo.uid.toString()
let abilityContext = GlobalContext.getContext().getValue("AbilityContext")
if (!abilityContext) {
throw new CommonError(`get context fail on ${SystemCertificateProvider.name}`)
}
const result = await (abilityContext as common.UIAbilityContext).startAbilityForResult({
bundleName: "com.ohos.certmanager",
abilityName: "MainAbility",
uri: "requestAuthorize",
parameters: {
appUid: appUid,
}
} as Want)
if (!result.resultCode && result.want && result.want.parameters) {
authUri = result.want.parameters.authUri as string
}
} catch (e) {
LogUtil.error(e)
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
针对HarmonyOS鸿蒙Next webview进行双向认证的问题,以下是一些可能的解决方案和注意事项:
- 确认API使用:确保你正在使用的webview API支持双向认证。HarmonyOS的webview组件可能提供了特定的API或回调来处理客户端证书的请求和确认,如
onClientAuthenticationRequest
。 - 证书管理:在HarmonyOS中,证书和私钥的管理可能与Android有所不同。你需要确保你的应用有适当的权限来访问和使用这些证书。同时,注意HarmonyOS可能没有直接对应Android的KeyChain API,因此可能需要使用其他方式(如CertManager)来管理证书。
- 错误处理:如果遇到错误,如
ERR_SSL_CLIENT_AUTH_CERT_NEEDED
,请检查你的证书是否正确加载,并且确保你的webview已经正确设置了证书回调。 - 参考文档:详细查阅HarmonyOS的官方开发文档,特别是关于webview和证书管理的部分。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。