PublicKeyCredential

Baseline 广泛可用 *

此功能已成熟,并可在多种设备和浏览器版本上运行。自 2021 年 9 月起,所有浏览器均已支持此功能。

* 此特性的某些部分可能存在不同级别的支持。

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

PublicKeyCredential 接口提供了有关公钥/私钥对的信息,这是一个用于通过防钓鱼和抗数据泄露的不对称密钥对(而不是密码)登录服务的凭证。它继承自 Credential,并且是 Web Authentication APICredential Management API 的扩展的一部分。

Credential PublicKeyCredential

注意: 此 API 仅限于顶层上下文。在 <iframe> 元素内使用将不起作用。

实例属性

PublicKeyCredential.authenticatorAttachment 只读

一个字符串,指示在相应的 navigator.credentials.create()navigator.credentials.get() 调用完成时,WebAuthn 实现连接到身份验证器的方式。

PublicKeyCredential.id 只读

继承自 Credential,并被重写为 base64url 编码PublicKeyCredential.rawId

PublicKeyCredential.rawId 只读

一个 ArrayBuffer,其中包含此 PublicKeyCredential 的全局唯一标识符。此标识符可用于在将来的 navigator.credentials.get() 调用中查找凭证。

PublicKeyCredential.response 只读

一个 AuthenticatorResponse 对象的实例。如果 PublicKeyCredentialnavigator.credentials.create() 调用结果,则其类型为 AuthenticatorAttestationResponse;如果 PublicKeyCredentialnavigator.credentials.get() 调用结果,则其类型为 AuthenticatorAssertionResponse

PublicKeyCredential.type 只读

继承自 Credential。对于 PublicKeyCredential 实例,始终设置为 public-key

静态方法

PublicKeyCredential.getClientCapabilities()

返回一个 Promise,该 Promise 解析为一个对象,可用于检查是否支持特定的 WebAuthn 功能和 扩展

PublicKeyCredential.isConditionalMediationAvailable()

返回一个 Promise,该 Promise 解析为 true(如果条件中介可用)。

PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()

返回一个 Promise,该 Promise 解析为 true(如果绑定到平台的身份验证器能够验证用户)。

PublicKeyCredential.parseCreationOptionsFromJSON()

注册用户凭证时,用于反序列化服务器发送的凭证注册数据的便捷方法。

PublicKeyCredential.parseRequestOptionsFromJSON()

认证(已注册)用户时,用于反序列化服务器发送的凭证请求数据的便捷方法。

PublicKeyCredential.signalAllAcceptedCredentials()

向身份验证器发出信号,告知所有受信任的 凭证 ID,这些凭证是 依赖方服务器仍然为特定用户持有的。

PublicKeyCredential.signalCurrentUserDetails()

向身份验证器发出信号,表明特定用户已更新其用户名和/或显示名称。

PublicKeyCredential.signalUnknownCredential()

向身份验证器发出信号,表明一个 凭证 ID 未被 依赖方服务器识别,例如因为它已被删除。

实例方法

PublicKeyCredential.getClientExtensionResults()

如果请求了任何扩展,此方法将返回处理这些扩展的结果。

PublicKeyCredential.toJSON()

注册用户凭证认证已注册用户时,用于创建 PublicKeyCredential 的 JSON 字符串表示并发送到服务器的便捷方法。

示例

创建 PublicKeyCredential 的新实例

在这里,我们使用 navigator.credentials.create() 来生成一个新凭证。

js
const createCredentialOptions = {
  publicKey: {
    challenge: new Uint8Array([
      21, 31, 105 /* 29 more random bytes generated by the server */,
    ]),
    rp: {
      name: "Example CORP",
      id: "login.example.com",
    },
    user: {
      id: new Uint8Array(16),
      name: "canand@example.com",
      displayName: "Carina Anand",
    },
    pubKeyCredParams: [
      {
        type: "public-key",
        alg: -7,
      },
    ],
  },
};

navigator.credentials
  .create(createCredentialOptions)
  .then((newCredentialInfo) => {
    const response = newCredentialInfo.response;
    const clientExtensionsResults =
      newCredentialInfo.getClientExtensionResults();
  })
  .catch((err) => {
    console.error(err);
  });

获取 PublicKeyCredential 的现有实例

在这里,我们使用 navigator.credentials.get() 从身份验证器获取一个现有凭证。

js
const requestCredentialOptions = {
  publicKey: {
    challenge: new Uint8Array([
      /* bytes sent from the server */
    ]),
  },
};

navigator.credentials
  .get(requestCredentialOptions)
  .then((credentialInfoAssertion) => {
    // send assertion response back to the server
    // to proceed with the control of the credential
  })
  .catch((err) => {
    console.error(err);
  });

规范

规范
Web Authentication:访问公钥凭证的 API - 第 3 级
# iface-pkcredential

浏览器兼容性

另见