Passwordless认证:安全、简单并且快速部署

428 查看

Passwordless是一个Node.js的认证中间件,可在快速简单部署的同时为你的用户提高安全性。

过去几个月对于每一个对网络安全和隐私感兴趣的人都是非常令人激动的:绝佳的文章讨论,以及演讲但也有大量引起关注的事件

然而,大多数网站仍然无法摆脱与早期网络就开始的相同的认证机制:用户名和密码。

虽然用户名和密码有它们的一席之地,但如果它们对于我们的项目来说是正确的解决方案,我们应做的更有挑战性。我们知道大多数人在所有他们访问的站点都使用相同的密码。对于没有专业安全专家的项目,我们是否真的应该让我们的用户冒着风险,违反我们的网站规定又损害他们亚马逊账号的么?同样,传统的认证机制默认存在至少两个攻击媒介:登陆页面和密码找回页面。尤其后者通常是实现的很匆忙,因此本质上更危险。

我们最近看到过相当多很棒的想法,而我则因为一个很简单明了且低技术含量的方案感到异常的兴奋:一次性密码。这实现起来很快,有较低的攻击风险,并且不需要二维码(注:QR codes)或JavaScript。无论用户何时想登陆或注销其会话,她都会收到一个短暂的一次性链接附带一个通过邮箱或短消息发送的令牌(token)。如果你想试试看,可随时测试passwordless.net上给出的例子。

不幸的是——根据你的技能堆栈——只有很少的现有解决方案。Passwordless为Node.js改变了这个现状。

开始使用Node.js和Express

开始使用Passwordless是简单明了的,你能够在两个小时内为一个小型项目部署一套完全成熟并且安全的认证方案:

获取基本框架。同样你要安装一个现有的存储接口,例如安全存储令牌的MongoStore

了给用户分发令牌,邮箱应作为作常用选项(短消息同样可行);你可以自由的选取现存的邮件框架,例如:

基本设置

我们在同一个文件中调用上诉提到的所有模块,该文件用来初始化Express:

如果你选择了emailjs用来分发令牌,那么用它连接到你的邮箱账号(例如一个Gmail账号)将会是美妙的一刻:

最后的准备工作是告诉Passwordless你选择了那种存储接口并初始化它:

分发一个令牌

passwordless.addDelivery(deliver)添加了一个新的分发机制。在任何时候一个令牌被送出就会调用deliver。默认情况下,你选择的机制会给用户提供一个如下格式的链接:

具备所有需要的详情,deliver就会被调用。因此,令牌的分发(本例中使用emailjs)可简化如下: