我正在使用 Ionic 框架构建一个应用程序,并且我正在尝试使用密钥让用户能够无密码注册和使用该应用程序。我已经能够在浏览器和 Android 上使用密钥,但无法在 iOS 上实现此目的,并出现错误消息“WebAuthn 未在 ios 上实现”。我正在使用 Capacitor 5,在 iOS 16 的 iOS 设备上进行了测试。我使用的是来自 https://www.npmjs.com/package/@joyid/capacitor-native-passkey
的包我的代码如下:
import { WebAuthn as IOSWebAuthn } from '@joyid/capacitor-native-passkey';
export class Mypage {
async passkeyRegister() {
const resp = await this.utilService.get('req_register_passkey_otp');
// Get the challenge from server
try {
// pass the challenge to Webauthn to get keys
// always get error that is not implemented on ios
attResp = await IOSWebAuthn.create(resp.data.passkeyRegOption);
} catch (error) {
}
}
我还添加了 Web 凭据并设置了域关联,如此处配置中所述:https://github.com/f-23/react-native-passkey。我怎样才能让密钥在 iOS 上工作?预先感谢您。
这可能有点晚了,但您链接的包实际上并没有成为 Android 或 iOS 的桥梁以使用本机密钥。简而言之,在 iOS 上它不起作用,因为 ionic 使用 WKWebView,而不是 SFSafariViewController 或 ASWebAuthenticationSession,并且 navigator.credentials 仅在后两者中可用。有一些解决方法,但它们都有点hacky。 我建议找到一个不同的包,我个人分叉了https://github.com/lyokato/WebAuthnKit-iOS(他也有一个android版本)并使其工作。