选择合适的 Node.js 认证策略

Node正在兴起!我从2010年就开始玩并使用Node工作,那个时侯我看着它从一个小的个人hack项目成长为一个能够供开发者使用来构建真实、重要及大型应用的全面型构建工具。生态系统型解决方案如雨后春笋般涌现,在助力开发者的同时使生态系统也迅速发展着。但随着它的快速增长也越来越难找到最适合你的解决方案,因为来自谷歌搜索或npm的干扰。

认证和用户管理绝对是块困难且变化多端的战场。然而,当创建一个实际的Node应用时,这却是第一位需要确认的组件。本指南的目的是给你展现Node中用户管理和认证的全面。

选择合适的 Node.js 认证策略

相关阅读

Node.Js入门[PDF+相关代码]

Node.js入门开发指南中文版

Node.js安装与配置

Ubuntu 编译安装Node.js

Node中有哪些可用选择?

目前Node中有几个不同的路径来构建用户管理。它们的无序排列如下:

Passport.js / Everyauth

自己的数据库及哈希算法

用户管理即服务

Passport.js / Everyauth

PassportJSEveryauth是一个Node处理连接中间件协议的认证中间件。这意味着如果你使用ExpressRestifySails等框架,你就可以很容易地将其中一个认证方案(或策略)直接插入你的应用中。Everyauth配合其嵌入策略,就像通行证时可以选择使用的策略一样。一些开发者的经常配合通行证使用的策略是FacebookGoogle的,但这也包括诸如本地用户名/密码认证到一系列的OpenID、OAuth提供器等的一切,甚至是一个Stormpath通行策略。

尽管 Everyauth 和 Passport 都建立在同一个中间件框架之上,他们有自己的一套利弊。Passport 更加灵活和模块化的,但 Everyauth 提供了对路由和登录/注册有所帮助的额外的功能。对于很多 Node 开发员,Passport 也是首选的,因为它不使用承诺。

由于 Passport 和 Everyauth 都是建立在 Connect 上的,他们都将帮助你实现会话管理,其中包括: 

序列化经过身份验证的用户

会话管理

注销用户 

此外,它们非常适用于简单和容易的用户验证,但由于设计上的局限,并不适用于属于更广泛的用户管理需求。你还是需要设计,实施和维护其他用户验证需要的基础设施。

例如,如果你使用的是本地通行证(针对自己数据库的用户名密码验证策略),Passport 没有处理用户的注册及账户的验证。你需要使用数据库模块来进行身份鉴定,创建账户,追踪验证状态,创建验证令牌,发送邮件,以及验证账户。这意味着开发者会需要担心 URL 的安全性,移除过期的令牌,以及其它的安全约束(如数据库中密码的正确散列)。

自己的数据库及哈希算法

DIY 的方法不依赖于任何中间件。选择自己的栈,存储用户所用的数据库(可能是 PostgresSQL 或 MongoDB),以及一个用来生成密码散列的哈希算法(可能是 bcrypt 或 scrypt)。在 npm 中搜索 bcrypt 或 scrypt 会导致不少模块在质量上的变化,每个模块都有自己的依赖集合。如果你是 Windows 开发者,请特别注意 – 我们推荐 Javascript 原生实现的 bcrypt

选定栈后,你需要增加用户管理和身份验证。从历史上看,这种方式极其常见,但是与其它方式相比,它冗长乏味、易于出错、需要更多的维护。

你需要增加/解决:

账户创建

创建用户模式来保持用户数据

创建账户及存储那些使用 bcrypt / scrypt 盐化(增加随机字串)、散列过的密码

发送带有账户验证令牌的邮件

账户身份验证

验证用户身份(比较散列值)

账户管理

生成 / 失效令牌

密码复位的工作流

基于角色的访问/许可

ID 与 社会服务提供商的集成

系统安全

保护数据库以免于未授权访问

保护操作系统以免于未授权访问

数据备份

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/24a1cd55fb516807d4cfeaa68648745b.html