protonlabs/webauthn

此包已被废弃,不再维护。作者建议使用 lbuchs/WebAuthn 包。

一个简单的PHP WebAuthn (FIDO2) 服务器库

v1.0.0-beta1 2021-09-30 08:53 UTC

This package is not auto-updated.

Last update: 2022-08-10 08:26:30 UTC


README

Licensed under the MIT License Requires PHP 7.1.0 Last Commit

WebAuthn

一个简单的PHP WebAuthn (FIDO2) 服务器库

本项目旨在提供一个小型、轻量、易于理解的库,用于保护使用Yubico或Solo等安全密钥、Android或Windows Hello指纹的生物登录。

手册

查看/_test以了解此库的简单用法。请访问webauthn.lubu.ch以查看一个工作示例。

支持的证明声明格式

  • android-key ✅
  • android-safetynet ✅
  • apple ✅
  • fido-u2f ✅
  • none ✅
  • packed ✅
  • tpm ✅

此库支持使用X.509证书签名的验证器或自证明的验证器。不支持ECDAA。

工作流程

         JAVASCRIPT            |          SERVER
------------------------------------------------------------
                         REGISTRATION


   window.fetch  ----------------->     getCreateArgs
                                             |
navigator.credentials.create   <-------------'
        |
        '------------------------->     processCreate
                                             |
      alert ok or fail      <----------------'


------------------------------------------------------------
                      VALIDATION


   window.fetch ------------------>      getGetArgs
                                             |
navigator.credentials.get   <----------------'
        |
        '------------------------->      processGet
                                             |
      alert ok or fail      <----------------'

证明

什么是证明?通常,你只需要验证登录来自与注册时使用的相同设备。对于这个用例,你不需要任何证明。如果你需要更高的安全性,比如当你知道你公司的登录每个人都使用solokey时,你可以通过直接证明来验证,这个设备确实是solokey。公司甚至可以购买使用公司自签名根证书签名的验证器,然后你可以验证验证器是否是公司之一。

无证明

只需验证设备是注册时使用的同一设备。如果你只检查'none'格式,则可以使用此库进行'none'证明。

  • 如果你想要像github、facebook、google等一样简单的2FA登录保护,这可能是你想要使用的。

间接证明

浏览器可能会用更隐私友好和/或更易于验证的同一数据版本(例如,通过使用匿名化CA)替换AAGUID和证明声明。如果浏览器使用匿名化证书,则无法针对任何根CA进行验证。如果选择多个格式但未提供任何根CA,则此库将证明设置为间接。

  • 混合解决方案,客户端可能会因为浏览器警告而受到挫败,但你知道他们使用的是什么设备(统计数据规则!)

直接证明

浏览器提供了标识设备的数据,该设备可以唯一地识别。用户可能会因为多个站点而跟踪,因此浏览器可能会在注册时显示警告信息提供此数据。如果你选择多个格式并提供根CA,则此库将证明设置为直接。

  • 如果你知道你的客户端使用什么设备并确保只使用这些设备,这可能是你想要的。

常驻凭证

客户端驻留的公钥凭证源,简称驻留凭证,是一种其凭证私钥存储在验证器、客户端或客户端设备中的公钥凭证源。这种客户端存储需要驻留凭证验证器。这仅由FIDO2硬件支持,不支持旧U2F硬件。

它是如何工作的?

在正常的服务器端密钥处理过程中,用户输入其用户名(可能还有密码),然后服务器回复用户已注册的所有公钥凭证标识符。然后,验证器取提供的凭证标识符列表中的第一个,即由自己签发的,并响应一个可以使用注册时提供的公钥验证的签名。在客户端密钥处理过程中,用户不需要提供用户名或密码。服务器不发送任何标识符;相反,验证器在其自身内存中查找,是否为此依赖方保存了密钥。如果有的话,他将像提供标识符列表一样做出响应,检查注册没有区别。Windows 10(Firefox、Chromium)支持驻留凭证。旧操作系统如Windows 7的浏览器会回退到FIDO U2F,它不支持驻留凭证。

我如何使用这个库?

在注册时

当调用WebAuthn\WebAuthn->getCreateArgs时,将$requireResidentKey设置为true,以通知验证器它应该在内存中保存注册。

在登录时

当调用WebAuthn\WebAuthn->getGetArgs时,不要提供任何$credentialIds(验证器将在其自身内存中查找ID)。

要求

  • PHP >= 7.1.0,带有OpenSSL
  • 支持WebAuthn的浏览器(Firefox 60+、Chrome 67+、Edge 18+、Safari 13+)

关于WebAuthn的信息

FIDO2硬件