PublicKeyCredential:parseRequestOptionsFromJSON() 静态方法

基准线 2025
新推出

自 ⁨2025 年 3 月⁩ 起,此功能可在最新的设备和浏览器版本上使用。此功能可能在旧设备或浏览器上无法正常工作。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

PublicKeyCredential 接口的 parseRequestOptionsFromJSON() 静态方法将 JSON 类型表示 转换为 PublicKeyCredentialRequestOptions 实例。

此方法是一个便捷函数,用于转换由依赖方服务器提供给 Web 应用的信息,以便请求现有的凭证。

语法

js
PublicKeyCredential.parseRequestOptionsFromJSON(options)

参数

options

一个结构与 PublicKeyCredentialRequestOptions 实例相同的对象,但其中 buffer 属性使用了 base64url 编码的字符串。

返回值

一个 PublicKeyCredentialRequestOptions 实例。

异常

EncodingError DOMException

如果 options 对象中的任何部分无法转换为 PublicKeyCredentialRequestOptions 实例,则会抛出此异常。

SecurityError DOMException

RP 域无效。

描述

Web 身份验证过程中,用于 验证(已注册)用户 的过程涉及一个依赖方服务器向 Web 应用发送查找现有凭证所需的信息,包括用户身份、依赖方、一个 "challenge"(挑战)的详细信息,以及可选的查找凭证的位置:例如,在本地内置的身份验证器上,或通过 USB、BLE 等连接的外部身份验证器上。Web 应用通过调用 navigator.credentials.get() 并传入一个包含服务器提供数据的 PublicKeyCredentialRequestOptions 实例作为参数,将此信息传递给身份验证器以查找凭证。

规范并未定义请求凭证所需的信息是如何发送的。一种便捷的方法是让服务器将信息封装在 PublicKeyCredentialRequestOptions 实例的 JSON 类型表示 中,该表示与其结构相匹配,但将 challenge 等 buffer 属性编码为 base64url 字符串。然后,此对象可以被序列化为 JSON 字符串,发送到 Web 应用并反序列化,然后使用 parseRequestOptionsFromJSON() 转换为 PublicKeyCredentialRequestOptions 实例。

示例

在授权一个已注册用户时,依赖方服务器将向 Web 应用提供有关请求的凭证、依赖方和 challenge 的信息。下面的代码按照 options 参数 中所述的格式定义了这些信息。

js
const requestCredentialOptionsJSON = {
  challenge: new Uint8Array([139, 66, 181, 87, 7, 203 /* … */]),
  rpId: "acme.com",
  allowCredentials: [
    {
      type: "public-key",
      id: new Uint8Array([64, 66, 25, 78, 168, 226, 174 /* … */]),
    },
  ],
  userVerification: "required",
};

由于此对象仅使用 JSON 数据类型,因此可以使用 JSON.stringify() 将其序列化为 JSON 并发送到 Web 应用。

js
JSON.stringify(requestCredentialOptionsJSON);

Web 应用可以将 JSON 字符串反序列化回 requestCredentialOptionsJSON 对象(此处未显示)。parseRequestOptionsFromJSON() 方法用于将该对象转换为可在 navigator.credentials.get() 中使用的格式。

js
// Convert options to form used by get()
const publicKey = PublicKeyCredential.parseRequestOptionsFromJSON(
  requestCredentialOptionsJSON, // JSON-type representation
);

navigator.credentials
  .get({ publicKey })
  .then((returnedCredentialInfo) => {
    // Handle the returned credential information here.
  })
  .catch((err) => {
    console.error(err);
  });

规范

规范
Web Authentication:访问公钥凭证的 API - 第 3 级
# dom-publickeycredential-parserequestoptionsfromjson

浏览器兼容性

另见