首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用`navigator.credentials.get()‘在跨源iframe提供错误“’公开密钥-凭据-获取‘特性在本文档中未启用”

使用`navigator.credentials.get()‘在跨源iframe提供错误“’公开密钥-凭据-获取‘特性在本文档中未启用”
EN

Stack Overflow用户
提问于 2022-01-22 20:55:43
回答 2查看 824关注 0票数 3

在通过webauthn登录到iframe时获取错误。

本文档中未启用“公开密钥-凭据-获取”功能。权限策略可用于将Web身份验证功能委托给跨源子帧。

下面是指向示例https://jsfiddle.net/14kj25nr/的链接。我直接通过test_account注册了一个用户“webauthn.io”,然后尝试通过jsfiddle登录到它。它说要使用publickey-credentials-get,但是我找不到一种方法让它工作。任何帮助都将不胜感激。

更新1:

我为iframe allow="publickey-credentials-get"添加了允许属性。它仍然给了我同样的错误。小提琴中的例子被更新了。

更新2:

来自IAmKale的建议。我做了以下更改,但仍然得到了相同的错误。更新了iframe allow="publickey-credentials-get *"的允许属性。

我使用Requestly铬扩展在RP的响应中添加Permissions-Policy头。在下面的屏幕截图中可以看到,我成功地在响应中添加了标题。但还是会犯同样的错误。会不会是jsfiddle的一些特定问题?还是我做错了什么?我正在使用Chrome版本96.0.4664.110。

更新3:

当我在本地主机中使用iframe而不是jsfiddle时,我会看到webauthn chrom弹出。但是登录仍然不成功,服务器返回POST https://webauthn.io/assertion 400

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-23 16:16:18

扩展Tim的答案后,嵌入RP的站点需要添加以下allow属性:

代码语言:javascript
复制
<iframe src="..." allow="publickey-credentials-get *" />

规范对此有点模棱两可,但我认为RP还需要在对iframe的权限策略中指定的src的响应中设置以下header

代码语言:javascript
复制
Permissions-Policy: publickey-credentials-get=*

如果您想要更多的粒度控制,可以将允许嵌入RP站点的特定URL白名单:

代码语言:javascript
复制
# Only specific sites
Permissions-Policy: publickey-credentials-get=("https://example.com")

https://example.com是将RP站点嵌入到<iframe>中的页面的URL

一旦两部分都就位,我认为您将能够在iframe中触发navigator.credentials.get()

票数 3
EN

Stack Overflow用户

发布于 2022-01-23 00:10:08

默认情况下,跨源iframes中禁用Web身份验证API。若要覆盖此默认策略并指示允许跨源iframe调用的[DiscoverFromExternalSource]方法,请在iframe元素上指定允许属性,并在允许属性值中包含公钥凭据获取功能标识符令牌。

https://www.w3.org/TR/webauthn-2/#sctn-iframe-guidance

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70817061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档