身份验证是 Web 应用程序的一个非常重要的方面。如果您正在向用户提供服务或销售某些产品,则应跟踪用户以供将来参考。所有这一切只有在您拥有身份验证系统的情况下才能实现。
但是为工作使用正确的工具也是非常必要的。过去,基于电子邮件和密码的身份验证最为流行和广泛使用。但随着时间的推移,当大型科技公司涌现并拥有庞大的用户群时,引入了一个名为 OAuth 的新概念。如果您作为站点的所有者信任 OAuth 提供者对用户进行身份验证,作为回报,OAuth 提供者会为您提供用户的详细信息。
基于 OAuth 的身份验证对用户来说很简单。他们只需在 OAuth 提供商处维护一个帐户,并使用此帐户登录所有其他网站。但 OAuth 过程中始终涉及信任。
一段时间后,无密码身份验证出现了。在此过程中,当您输入用户名或电子邮件时,他们会向您发送一个链接。如果您将链接粘贴到浏览器中,您将自动进行身份验证并登录。无密码身份验证的最常见示例是当您单击发送魔术链接以登录到hackernoon.com 时。
随着人工智能 (AI) 和机器学习 (ML) 的进步,面部识别技术越来越受欢迎。随着时间的推移,随着数据集变得越来越大,人工智能模型的准确性也会提高。如今,我们还可以使用面部识别技术在我们的 Web 应用程序中对用户进行身份验证。
在本文中,我们将构建一个简单的应用程序,以演示如何使用面部识别对用户进行身份验证。在这个过程中,我们将使用 FaceIO API。
面部识别的需求是多方面的。我试图以简洁的方式在这里提出一些观点。确保将文章阅读到最后,以获得完整的概念理解和详细的实现演练。
现在我们将制作一个面部认证 Web 应用程序。这个项目包括所有的点点滴滴,以及所有你需要知道的关于如何在你的 web 应用程序中实现基于人脸识别的身份验证。
我正在一步一步地解释这个过程。您可以在此处获得完整的源代码。确保获得免费的API 密钥以进行后续操作。
创建一个空白目录并在其中创建一个index.html
文件。您也可以添加一个单独的 CSS 文件,但为了简单起见,我将其保持在最低限度。
如果您使用 VSCode 进行开发,则可以使用实时服务器来提供静态文件。
在您的index.html
中,首先添加这个基本的 HTML 标记。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body></body> </html>
FaceIO 提供了一个非常方便的 JavaScript 库来与他们的 AI 模型进行交互。这让我们的生活变得更加轻松,我们只需几行代码就可以实现面部识别功能。要添加 FaceIO javascript 库,我们在 HTML 文档的 body 标记中使用它们的 CDN(内容交付网络)。
<body> <script src="https://cdn.faceio.net/fio.js"></script> </body>
现在,创建一个文件index.js
并将文件链接到 FaceIO CDN 之后的 body 标签内。
<body> <script src="https://cdn.faceio.net/fio.js"></script> <script src="./index.js"></script> </body>
现在让我们创建 2 个辅助函数来简化我们的开发过程。一种用于注册用户(如注册功能),另一种用于身份验证(如登录功能)。
由于 FaceIO 提供的 javascript 库,注册用户非常简单。在 HTML 标记中添加一个带有id="enroll"
的按钮。我们使用getElementbyID
方法访问我们的 javascript 文件中的这个按钮。
现在在index.js
中初始化 FaceIO 对象。您必须添加 FaceIO 项目的公共 ID。您可以获得项目仪表板中列出的公共 ID。
const faceio = new faceIO("<Your Public ID here");
让我们在注册按钮中添加一个事件监听器。当有人点击按钮时,我们执行 faceIO 对象的注册方法。此注册方法采用各种可选参数。
locale
是用户的本地语言。permissions timeout
对应于等待用户授予摄像头访问权限的秒数。termsTimeout
是等待用户接受 FaceIO 条款和条件的秒数。idleTimeout
是尝试识别人脸时等待的总秒数。replyTimeout
是等待从 FaceIO 节点接收处理过的面部数据的秒数。userConcent
是一个布尔值,表示用户是否同意扫描他们的脸。如果您已经征得用户的同意,则可以将该值设置为true
。payload
:在注册函数中,您可以添加您选择的有效负载。有效载荷应该是一个键值对象。您可以使用此有效负载功能附加您的电子邮件地址或与用户相关的任何其他信息。
在我们的例子中,注册函数看起来像这样。
enroll.addEventListener("click", async () => { let response = await faceio.enroll({ locale: "auto", payload: { email: "[email protected]", pin: "12345", }, }); console.log(` Unique Facial ID: ${response.facialId} Enrollment Date: ${response.timestamp} Gender: ${response.details.gender} Age Approximation: ${response.details.age}`); });
运行此函数时,用户面前会出现一个弹出窗口。此弹出窗口包含条款和条件。如果用户接受条款和条件,它会要求访问相机。如果用户授予摄像头访问权限,FaceIO 将扫描面部。
FaceIO 模型寻找将用户与其他人区分开来的独特面部特征。完成后,您必须添加一个附加到您的面部数据的 PIN。此 PIN 对用户非常重要,并将其保存在更安全的地方。
当所有这些步骤都完成后,FaceIO 会向用户返回一个userInfo
对象。该对象包含一个用户面部 ID,它是一个通用唯一标识符、性别和年龄。性别和年龄不是很准确,因为它们是由人工智能模型预测的。
您可以使用将此 faceID 存储在您的后端。当用户想要登录时,您可以匹配此 faceID 来验证用户。
在工作流程中,如果发生任何错误,FaceIO 会提供大量错误消息。如果用户不允许摄像头访问,则会引发fioErrCode.PERMISSION_REFUSED
错误。
如果用户不接受条款和条件弹出窗口,则服务器会抛出fioErrCode.TERMS_NOT_ACCEPTED
错误。
要启动身份验证流程,请在您的 HTML 标记中添加一个id="authenticate"
的按钮。在getElementbyID
方法的帮助下访问index.js
中的这个按钮。
现在,当用户按下此按钮时,我们将启动身份验证流程。认证功能非常简单。
Authenticate 函数采用permissionTimeout
、 idleTimeout
、 replyTimeout
和locale
参数,就像前面的enroll()
函数一样。代码看起来像这样。
authenticate.addEventListener("click", async () => { let response = await faceio.authenticate({ locale: "auto", }); console.log(` Unique Facial ID: ${response.facialId} PayLoad: ${response.payload} `); });
当用户按下认证按钮时,会弹出与注册功能类似的屏幕。它需要您的相机访问权限并扫描您的脸部。扫描后,它会询问您在注册期间输入的 PIN。
如果您提供正确的 pin,FaceIO 会返回您在注册过程中指定的 FaceData 和有效负载。
您还可以通过匹配服务器中的 faceID 来仔细检查身份验证流程。
现在我们的身份验证流程已经完成。您可以看到它比实现电子邮件密码身份验证流程更容易。所有繁重的工作都由 FaceIO 服务器及其 AI 模型完成,作为开发人员,您只需添加应用程序逻辑即可修改身份验证流程及其体验。
FaceIO 拥有强大的隐私保护系统。让我列出其中的一些。
它符合 GDPR 和 CCPA :FaceIO 服务完全符合 GDPR 和 CCPA。 GDPR 代表通用数据保护条例。它于 2018 年通过,要求所有企业保护用户的个人数据和隐私。
CCPA 代表加州消费者保护法,让用户可以更好地控制他们的数据。如果您在这些地区开展业务,则不必担心。
它仅存储哈希值:FaceIO 仅存储您面部特征的哈希值。它不存储任何纯数据,并尽可能少地存储信息。客户端库和小部件不处理任何生物特征数据。所有过程都在后端完成。
FaceIO 完全与浏览器无关。它可以运行任何浏览器,包括 chrome、firefox 和 safari。由于所有处理都在服务器上完成,FaceIO 只需要您的相机访问权限即可运行。
如果您通过禁用 javascript 来使用某些隐私浏览器,请确保启用它们。由于 FaceIO 需要使用 javascript 与服务器对话。
是的,您可以从头开始构建模型并在您的 Web 应用程序中实现面部认证功能。但是为此,您应该对人工智能和机器学习过程有深入的了解。
由于大多数 Web 开发人员都不是这种背景,因此使用其他人的服务来实现功能而不是重新发明轮子是明智之举。
市场上还有其他解决方案可供您探索。一种是 AWS Rekognition。该服务由 AWS 提供,工作方式与 FaceIO 非常相似。有趣的是,您可以在 FaceIO 控制面板中选择 AWS Rekognition。
对的,这是可能的。你现在可以选择你想要的,然后去做。
正如我们在编码部分中看到的,您必须在启动 FaceIO 对象期间提供您的公共 ID。如果需要,可以使用环境变量将其隐藏。如果您使用的是前端框架或构建系统,则可以在构建时动态添加这些值。
如果您使用 NextJS,您可以使用.env.local
文件来保存您的敏感凭据。
如果你不使用任何框架,你可以使用 Vite。 Vite 支持环境变量。它构建和压缩您的 vanilla js 项目以加快部署速度。只需创建一个.env
文件,将所有凭据放在那里,就完成了。不要忘记将.env
文件放入.gitignore
列表中。
如果你读到这篇文章,我想你喜欢这篇文章。请与您的同行分享。如果您想提供任何反馈,我可以在 Twitter 上以hrishikshpathak的身份联系到我。继续阅读,继续学习。