交叉编译的WebAuthn Go示例报浏览器不支持但宿主运行正常
问题核心诱因
- 安全上下文限制是触发报错的根本原因
WebAuthn API的W3C规范明确要求接口必须在安全上下文中才能暴露,Chrome 91的实现中仅以下两类场景符合安全上下文要求:- 访问地址为
localhost/127.0.0.1这类本地回环地址 - 访问使用HTTPS协议且证书有效
你在本地宿主运行时用的是本地回环地址,符合安全上下文要求,window.PublicKeyCredential正常存在;部署到arm7设备后,不管用IP还是bonjour域名访问,只要走HTTP协议且不是本地回环地址,浏览器就会隐藏PublicKeyCredential接口,因此触发你贴的这段校验逻辑:
- 访问地址为
// check whether current browser supports WebAuthn if (!window.PublicKeyCredential) { alert("Error: this browser does not support WebAuthn"); return; }
这个报错和后端服务的交叉编译架构、设备是否联网完全无关,因为这段校验逻辑完全运行在用户的浏览器侧。
可行解决方法
- 给arm7设备上的服务配置有效HTTPS证书,使用HTTPS协议访问
- 临时测试可以修改Chrome安全策略:访问
chrome://flags/#unsafely-treat-insecure-origin-as-secure,将你的服务地址(如http://192.168.x.x:端口或对应bonjour地址)加入白名单,重启浏览器后即可正常访问
内容的提问来源于stack exchange,提问作者Umut
相关产品推荐
相关产品推荐

