创建 fido2AuthenticationMethod

命名空间:microsoft.graph

为用户创建新的 fido2AuthenticationMethod 对象。 此 API 在 WebAuthn 注册过程中完成 FIDO2 安全密钥 (密钥) 的注册。

Passkey 注册流:

  1. 调用 creationOptions 函数以从 Microsoft Entra ID 检索 WebAuthn 凭据创建选项。
  2. 使用返回的选项使用 WebAuthn API 在浏览器或验证器中创建新的凭据。
  3. 将生成的公钥凭据 POST 到此 API 以完成注册。

注意

此 API 具有以下已知问题:

权限

为此 API 选择标记为最低特权的权限。 只有在应用需要它时,才使用更高的特权权限。 有关委派权限和应用程序权限的详细信息,请参阅权限类型。 要了解有关这些权限的详细信息,请参阅 权限参考

权限类型 最低特权权限 更高特权权限
委派(工作或学校帐户) UserAuthMethod-Passkey.ReadWrite.All UserAuthenticationMethod.ReadWrite.All
委派(个人 Microsoft 帐户) 不支持。 不支持。
应用程序 UserAuthMethod-Passkey.ReadWrite.All UserAuthenticationMethod.ReadWrite.All

重要

对于使用工作或学校帐户(其中已登录用户对其他用户进行操作)的委派访问,必须为他们分配受支持的Microsoft Entra角色或授予此操作所需权限的自定义角色。 此操作支持以下内置角色,这些角色仅提供所需的最小特权:

  • 身份验证管理员
  • 特权身份验证管理员

当用户管理自己的身份验证方法时,系统会提示他们完成多重身份验证, (MFA) 如果他们上次在当前会话中进行身份验证的时间超过 10 分钟。

HTTP 请求

注意

调用 /me 终结点需要已登录的用户,因此需要委派权限。 使用 /me 终结点时,不支持应用程序权限。

POST /users/{id}/authentication/fido2Methods
POST /me/authentication/fido2Methods

请求标头

名称 说明
Authorization 持有者 {token}。 必填。 详细了解 身份验证和授权
Content-Type application/json. 必需。

请求正文

在请求正文中,提供 fido2AuthenticationMethod 对象的 JSON 表示形式。

创建 fido2AuthenticationMethod 时,可以指定以下属性。

属性 类型 说明
displayName String FIDO2 安全密钥的显示名称。 可选。
publicKeyCredential webauthnPublicKeyCredential 验证器创建的 WebAuthn 公钥凭据。 根据 RFC 4648 第 5 节中定义,Base64URL 对所有二进制数据进行编码,无需填充。 此编码适用于凭据 IDclientDataJSONattestationObject 属性。 必填。

响应

如果成功,此方法在响应正文中返回响应 201 Created 代码和 fido2AuthenticationMethod 对象。

示例

请求

以下示例显示了一个请求。

POST https://graph.microsoft.com/v1.0/users/99a1915f-70a7-4b67-9dca-64095b41be73/authentication/fido2Methods
Content-Type: application/json

{
  "@odata.type": "#microsoft.graph.fido2AuthenticationMethod",
  "displayName": "My security key",
  "publicKeyCredential": {
    "@odata.type": "#microsoft.graph.webauthnPublicKeyCredential",
    "id": "OEVEMkQzNTctNzNEMi00RjEzLTk5MjYtODdGNjFCMjRBMzQy",
    "response": {
      "@odata.type": "#microsoft.graph.webauthnAuthenticatorAttestationResponse",
      "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiUVRVMU16TkROekF0TmtNM05pMDBOVFJETFVKRFEwWXRSVFJFTURaQ05UQkZSVFJFIiwib3JpZ2luIjoiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ",
      "attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVikSZYN5YgOjGh0NBcPZHZgW4/krrmihjLHmVzzuoMdl2NdAAAAALraVWanqkAfvZZFYZpVEg0AIDhFRDJEMzU3LTczRDItNEYxMy05OTI2LTg3RjYxQjI0QTM0MqUBAgMmIAEhWCAMKJ7T4r8w5F6JGxJLJXNR0hV1MZF1aZ1F0pZXq5p5"
    },
    "clientExtensionResults": {
      "@odata.type": "#microsoft.graph.webauthnAuthenticationExtensionsClientOutputs"
    }
  }
}

响应

以下示例显示了相应的响应。

注意:为了提高可读性,可能缩短了此处显示的响应对象。

HTTP/1.1 201 Created
Content-Type: application/json

{
  "@odata.type": "#microsoft.graph.fido2AuthenticationMethod",
  "id": "73e4b2c6-8a2f-4d3e-9b1a-5c7d8e9f0a1b",
  "displayName": "My security key",
  "createdDateTime": "2026-04-20T10:15:30Z",
  "aaGuid": "de1e552d-db1d-4423-a619-566b625cdc84",
  "model": "Security Key NFC by Yubico",
  "attestationCertificates": [],
  "attestationLevel": "attested",
  "passkeyType": "deviceBound"
}