随着Web 2.0的出现,认证用户成为开发者的一项重要任务。
在Web 2.0之前,网站访问者只能查看网页的内容,没有互动。这个时代的互联网被称为Web 1.0。
但在Web 2.0之后,人们获得了在网站上发布自己的内容的能力。然后,内容审核成为网站所有者的一项永无止境的任务。
为了减少这些网站上的垃圾邮件,开发商引入了用户认证系统。现在,网站版主可以很容易地知道垃圾邮件的来源,并可以阻止这些垃圾邮件发送者进一步访问网站。
如果你想知道如何在你的网站上实施内容审核,你可以阅读我的文章:如何在你的网络应用中检测和模糊人脸。
现在让我们来看看本教程中我们将进入的内容。
本教程中你将学习的内容
在本教程中,我们将讨论不同的认证技术,你可以用来认证用户。这些技术包括电子邮件-密码认证、电话认证、OAuth、无密码魔力链接,以及最后的面部认证。
在这篇文章中,我们的主要重点将是通过人脸识别技术进行认证。
我们还将建立一个项目,教你如何在你的React网络应用中整合基于面部识别的认证。
在这个项目中,我们将使用FaceIO SaaS(软件即服务)平台来整合基于面部识别的认证。所以,请确保你设置了一个免费的FaceIO账户来跟随我们。
最后,我们将看一下用户隐私方面,讨论人脸识别如何不损害你的隐私。我们还将讨论它是否是未来开发者的一个可靠选择。
这篇文章充满了信息、实践项目和讨论。拿上一杯咖啡和一块比萨饼🍕,让我们开始吧。
这个项目的最终版本看起来是这样的。看起来很有趣?那我们就开始吧:
不同类型的用户认证系统
现在有许多用户认证系统,你可以选择在你的网站上实施。没有真正优越或低劣的认证技术。所有这些认证系统都取决于使用正确的工具来完成工作。
例如,如果你正在做一个简单的登陆页面来收集用户的电子邮件,就没有必要使用OAuth。但如果你正在建立一个社交平台,那么使用OAuth比传统认证更有意义。你可以直接从OAuth中提取用户的详细信息和个人资料图片。
如果你的网络应用是围绕任何与投资有关的内容或具有法律约束力的服务建立的,那么使用电话认证就更有意义。用户可以创建无限的电子邮件账户,但他们可以使用的电话号码有限。
让我们来看看一些流行的认证系统,这样我们就可以看到它们的优点和缺点。
基于电子邮件-密码的认证
基于电子邮件-密码的认证是验证用户的最古老的技术。实施起来也非常简单,易于使用。
这个系统的优点是你不需要有一个第三方账户来登录。如果你有一个电子邮件,无论它是自我托管还是来自服务(如Gmail、Outlook等),你都可以使用。
这个系统的主要缺点是你需要记住你所有的密码。由于网站的数量在不断增加,而且我们需要登录大多数网站来访问我们的资料,记住每个网站的密码对我们人类来说是一项艰巨的任务。
想出一个独特而强大的密码也是一项巨大的任务。我们的大脑通常没有能力记住许多随机的字母和数字串。这是基于电子邮件密码的认证系统的最大缺点。
电话认证
电话认证通常是一种非常可靠的认证技术,可以验证用户的身份。由于一个用户通常不会有超过一个电话号码,这可能最适合与资产有关的网站,因为用户身份非常重要。
但这个系统的缺点是,如果人们不信任你,就不愿意透露他们的电话号码。电话号码比电子邮件更私人。
电话认证的一个更重要的因素是其成本。与电子邮件相比,向用户发送带有OTP的文本信息的成本很高。因此,网站所有者和开发者往往更愿意坚持使用电子邮件认证。
基于OAuth的认证
与前两者相比,OAuth是一种相对较新的技术。在这种技术中,OAuth提供用户认证和代表用户的有用信息。
例如,如果用户在谷歌有一个账户(例如),他们可以直接使用谷歌账户登录其他网站。网站从谷歌本身获得用户的详细信息。这意味着不需要创建多个账户并记住这些账户的每个密码。
这个系统的主要缺点是,作为一个开发者,你必须信任OAuth供应商,而许多人出于隐私原因,不想链接他们所有的账户。所以你经常会在大多数网站上看到除了OAuth之外,还有一个电子邮件-密码字段。
魔法链接认证
魔术链接解决了你在基于电子邮件密码的认证中所面临的大部分问题。在这里,你只需要提供你的密码,你就会收到一封带有认证链接的电子邮件。然后你必须在你的浏览器中打开这个链接,你就完成了。不需要记住任何密码。
这种类型的认证在这些天得到了普及。它为用户节省了大量的时间,而且也非常便宜。而且你不必像OAuth那样信任第三方。
面部识别认证
面部识别是最新的认证技术之一,现在很多开发者都在采用它。面部识别减少了输入你的电子邮件-密码或任何其他用户凭证来登录网络应用的麻烦。
最重要的是,这种认证系统速度快,不需要任何特殊的硬件。你只需要一个网络摄像头,现在几乎所有的设备都有。
面部识别技术使用人工智能绘制出用户独特的面部细节,并将其存储为哈希值(一些没有意义的随机数字和文本),以减少与隐私有关的问题。
从头开始构建和部署一个基于人工智能的人脸识别模型并不容易,对于独立开发者和小型创业公司来说,成本可能很高。因此,你可以使用SaaS平台来为你做这些繁重的工作。FaceIO和AWS识别是这类服务的例子,你可以在你的项目中使用。
在这个实践项目中,我们将使用FaceIO APIs在React网络应用中通过面部识别来验证用户。FaceIO为你提供了一个简单的方法,用他们的fio.js JavaScript库来整合认证系统。
项目设置
在开始之前,请确保创建一个FaceIO账户并创建一个新的项目。保存你的FaceIO项目的公共ID。我们在以后的项目中需要这个ID。
为了制作一个React.js项目,我们将使用Vite。要启动一个Vite项目,导航到你想要的文件夹并执行以下命令:
npm create vite@latest
然后按照指示,用Vite创建一个React应用程序。在该文件夹内导航并运行npm insall ,为你的项目安装所有的依赖项。
在完成所有这些步骤后,你的项目结构应该是这样的。
.
├── index.html
├── package.json
├── package-lock.json
├── public
│ └── vite.svg
├── src
│ ├── App.css
│ ├── App.jsx
│ ├── assets
│ │ └── react.svg
│ └── main.jsx
└── vite.config.js
如何将FaceIO集成到我们的React项目中?
为了将FaceIO集成到我们的项目中,我们需要在index.html 文件中添加他们的CDN。打开index.html 文件,在root 组件之前添加faceIO CDN。要了解更多,请查看FaceIO的集成指南:
<body>
<script src="https://cdn.faceio.net/fio.js"></script>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
现在删除App.jsx 文件中的所有代码,从头开始。我已经把这个教程保持得尽可能的简单。所以我只在用户界面中添加了一个标题和两个按钮来演示FaceIO的面部认证过程是如何进行的。
这里,一个按钮作为签到按钮,另一个作为登录按钮。
App.jsx 文件里面的代码看起来是这样的:
import "./App.css";
function App() {
return (
<section>
<h1>Face Authentication by FaceIO</h1>
<button>Sign-in</button>
<button>Log-in</button>
</section>
);
}
export default App;
如何使用FaceIO注册一个用户的面部
使用FaceIO工作是非常快速和简单的。由于我们使用的是fio.js 库,我们只需要执行一个辅助函数来验证一个用户。这个fio.js 库将为我们做大部分的工作。
为了注册一个用户,我们在一个useEffect 钩子里面初始化我们的FaceIO对象。否则,每次状态改变时,它就会重新运行组件并重新初始化faceIO 对象:
let faceio;
useEffect(() => {
faceio = new faceIO("Your Public ID goes here");
}, []);
你的FaceIO公共ID位于你的FaceIO控制面板上。复制这个公共ID并粘贴到这里来初始化你的FaceIO对象。
现在,定义一个名为handleSignIn() 的函数。这个函数包含我们的用户注册逻辑。
在这个函数里面调用faceIO 对象的enroll 方法。这个enroll 方法相当于标准密码支持的注册系统中的注册功能,并接受一个payload 参数。你可以在这个有效载荷中添加任何用户特定的信息(例如他们的姓名或电子邮件地址)。
这个有效载荷信息将与面部认证数据一起存储,供将来参考。要了解其他可选参数,请查看其API文档。
在我们的签到button ,在用户点击时我们调用这个handleSignIn() 函数。用户签到的代码片段看起来像这样:
const handleSignIn = async () => {
try {
let response = await faceio.enroll({
locale: "auto",
payload: {
email: "example@gmail.com",
pin: "12345",
},
});
console.log(` Unique Facial ID: ${response.facialId}
Enrollment Date: ${response.timestamp}
Gender: ${response.details.gender}
Age Approximation: ${response.details.age}`);
} catch (error) {
console.log(error);
}
};
<button onClick={handleSignIn}>Sign-in</button>
FaceIO屏幕
如何使用人脸识别进行签到
注册完用户后,你需要让用户进入认证或登录/签到流程。使用fio.js 库也可以让我们非常容易地建立一个使用人脸认证的登录流程。
我们必须调用faceIO 对象的authenticate 方法,这相当于标准密码支持的注册系统中的签到功能,所有的关键工作都将由fio.js 包完成。
首先,定义一个名为handleLogIn() 的新函数来处理我们React应用程序中的所有登录逻辑。在这个函数中,我们调用我前面提到的faceIO 对象的authenticate 方法。
这个方法接受一个locale 参数。这是用户与FaceIO部件互动的默认语言。如果你不确定,你可以在这个领域指定auto 。
authenticate 方法还接受更多的可选参数,如permissionTimeout,idleTimeout,replyTimeout 等。你可以查看他们的API文档以了解更多关于可选参数的信息。
当有人点击Log-in 按钮时,我们调用这个handleLogIn() 函数:
const handleLogIn = async () => {
try {
let response = await faceio.authenticate({
locale: "auto",
});
console.log(` Unique Facial ID: ${response.facialId}
PayLoad: ${response.payload}
`);
} catch (error) {
console.log(error);
}
};
<button onClick={handleLogIn}>Log-in</button>
我们使用FaceIO和React的用户认证项目现在已经完成了!你学会了如何注册和登录一个用户。你可以看到,与实现我们在本文前面讨论的基于email-password 或其他一些认证方法相比,这个过程相当简单。
现在,你可以使用CSS对所有的jsx 元素进行样式设计。我没有在这里添加CSS,以减少这个项目的复杂性。如果你感到好奇,你可以看看我的GitHub gist。
如果你想免费托管这个React FaceIO项目,你可以看看这篇文章:如何在Cloudflare页面中部署你的React和Nextjs项目。
如何使用FaceIO的REST API
除了通过fio.js 库提供部件外,FaceIO 还提供REST API来简化认证过程。
FaceIO控制台中的每个应用程序都有一个API密钥。你可以使用这个API密钥来访问FaceIO的REST API端点。REST API的基本URL是https://api.faceio.net/.
URL模式接受像这样的URL参数https://api.faceio.net/cmd?param=val¶m2=val2 。这里cmd 是一个API端点,param 是一个端点参数,如果它接受任何参数。
使用REST API端点,你可以在你的后端自动执行各种任务:
- 你可以根据用户的请求删除一个面部ID
- 你可以在一个人脸ID上附加一个有效载荷
- 你可以改变与人脸识别相关的密码
这个REST API的目的是纯粹在服务器端使用。确保你不把它暴露给客户。重要的是,你要阅读下面的隐私和安全部分,以了解更多这方面的信息。
如何使用FaceIO WebHooks
Webhooks是服务器之间的事件驱动的通信系统。你可以使用FaceIO的这个webhook功能来更新和同步你的后端与你的前端Web应用程序中发生的新事件。
这个webhook的事件会在新用户注册、面部认证成功、面部ID删除等情况下触发。
你可以在你的项目控制台设置FaceIO webhooks。一个典型的来自FaceIO的webhook调用持续6秒。这包含了所有关于一个特定事件的JSON格式的信息,看起来像这样:
{
"eventName":"String - Event Name",
"facialId": "String - Unique Facial ID of the Target User",
"appId": "String - Application Public ID",
"clientIp": "String - Public IP Address",
"details": {
"timestamp": "Optional String - Event Timestamp",
"gender": "Optional String - Gender of the Enrolled User",
"age": "Optional String - Age of the Enrolled User"
}
}
隐私和FaceIO
对于现在的用户来说,隐私是最重要的事情。当大公司为了他们的利益而使用你的数据时,人们对这些人脸识别技术的隐私是否有效和合法产生了疑问。
FaceIO作为一项服务,遵循所有的隐私准则,并在要求用户的相机访问之前得到用户的同意。即使开发者想,FaceIO也不会在没有得到同意的情况下扫描人脸。用户可以轻松地选择退出该系统,并可以从服务器上删除他们的面部数据。
FaceIO符合CCP和GDPR标准。作为一个开发者,你可以在世界任何地方发布这个面部认证系统而不面临隐私问题。你可以阅读这篇文章,了解更多关于FaceIO隐私的最佳实践。
FaceIO的安全性
网络应用的安全性是一个需要讨论和考虑的重要话题。作为一个开发人员,你要对一个网站或应用程序的用户的安全负责。
FaceIO遵循一些重要和严肃的安全准则来保护用户数据。FaceIO将用户的所有独特的面部数据和我们前面指定的有效载荷一起进行了加密。因此,存储的信息只不过是一些随机字符串,不能被反向工程。
FaceIO为开发者列出了一些非常重要的安全指南。他们的安全指南侧重于添加一个强大的引脚代码来保护用户数据。FaceIO也会拒绝被遮盖的面孔,这样就没有人可以冒充别人了。
总结
如果你已经读到这里,感谢你的时间和努力。一定要跟着实践教程走,这样你才能完全掌握这个主题。