HarmonyOS 鸿蒙Next webview进行双向认证的问题

发布于 1周前 作者 gougou168 最后一次编辑是 5天前 来自 鸿蒙OS

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的一些方法,但是似乎都没有能对应上面代码的替换方案

6 回复

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这个错误,很奇怪

补充一下,第一个问题捕获到了错误信息,ERR_SSL_CLIENT_AUTH_CERT_NEEDED,但是还是不知道为什么,下面是获取p12文件时的代码
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进行双向认证的问题,以下是一些可能的解决方案和注意事项:

  1. 确认API使用:确保你正在使用的webview API支持双向认证。HarmonyOS的webview组件可能提供了特定的API或回调来处理客户端证书的请求和确认,如onClientAuthenticationRequest
  2. 证书管理:在HarmonyOS中,证书和私钥的管理可能与Android有所不同。你需要确保你的应用有适当的权限来访问和使用这些证书。同时,注意HarmonyOS可能没有直接对应Android的KeyChain API,因此可能需要使用其他方式(如CertManager)来管理证书。
  3. 错误处理:如果遇到错误,如ERR_SSL_CLIENT_AUTH_CERT_NEEDED,请检查你的证书是否正确加载,并且确保你的webview已经正确设置了证书回调。
  4. 参考文档:详细查阅HarmonyOS的官方开发文档,特别是关于webview和证书管理的部分。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部