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

玩转自己的身份验证和用户管理的最大的挑战是,维护。以密码散列为例。方式正确的话,你选择了一个成本因素,为了防止暴力攻击特意使得你的散列算法缓慢(大约 300-700 毫秒)。不管怎样,摩尔定理是个婊子 — 计算的性价比每年折半。所以今天正确的成本因素,在明天就可能被认作是不可靠的。如果你正在创建可能会交付成产品的应用程序,至少每年更新一次散列策略是你的责任。

尽管 Node 社区很反感“玩转你自己的”中间件,这种方式也有一些好处。你可以完全控制自己的基础设施。如果对你可用的工具还没有“好到”可以发布给你的客户,那么你就有能力围绕身份验证和用户管理投入时间和精力去创新。幸运的是,应用程序和开发者很少有这种需求,所以开源工具以及现在可用的 API 服务,帮助他们推进更快、发布更多。

用户管理即作为一个服务

随着时间的推移,软件已经从本地软件,到云端发布,到分布式的API服务。与此同时,开发团队已经开始依赖于开源软件和API的服务, 甚至超过自己的代码。现在可以将用户管理卸载给新的系统, 这个新的系统通过REST API和开源的SDK来管理应用程序的开发。 Stormpath 以及一些开发用户API的初创公司就属于这一类,。特别是Node社区,已经远超其他任何社区采用了这种面向服务的模式。

通常情况下, API 驱动的服务在用户的管理上允许更加常见的功能,远远不止限于验证。这些附加功能根据提供商而不同,但通常包括:

帐户电子邮件验证

密码重置工作流程

基于角色的访问/权限

无模式的用户配置文件

双重因素身份验证

在应用程序之间的单点登录

社交登录的集成( Facebook,谷歌等)

集成到Node验证的中间件例如 Passport

除了这些纯粹的功能,它也提供相当可靠的安全性和操作性。为用户提供所有基础设施,延伸到吸收用户的流量高峰以及处理用户数据的安全问题。

卸载一个API服务通常可以提供更多的便利性和更高的安全性,同时也降低开发和维护的成本。开发人员可以集中更多的注意力打造属于自己的应用程序的独特部分。

不过有时用户也需要权衡的使用API服务。当你引用一个第三方的依赖性服务到你的应用中。它需要具有高可用,快速,便携,传输过程中提供可靠的安全性,并具有足够的灵活性,以满足用户的数据模型需要。

可用性和性能是至关重要的,因为对于一个特定的系统,如用户认证和管理不可能是离线状态或者时间很短。缓存到他们的SDK和基于现代云计算基础架构是不错的开始,但重要的是,该服务即将面临到最糟糕的情况 - 例如整个数据中心正在走下坡。因此你想要确保您可以收到任何的通知,则需要建立在用户管理服务的顶部。

数据移植也很关键 – 你能够安全的(并且容易的)来回移动数据。与轻松写出在 JSON 上移植未加密数据的脚本不同,移植密码的难易程度严重依赖于任何已存在的数据的存储方式。例如,bcrypt 设计的就很容易移植,因为它遵循模数加密格式(MCF)。对许多系统和语言而言, 通过查看散列值本身来理解怎样构造散列是可能的。如果你在建立一个原型,没有使用 Stormpath 之类的服务,我们推荐以类似 bcrypt 之类的 MCF 散列开始 – 在将来升级时会更容易。

与之前���实现方式相比,这种实现方式中,在你的应用程序和 API 服务之间的传输安全更加重要。额外的网络通讯需要安全化。例如,Stormpath 仅仅支持 HTTPS,使用一个特定摘要验证算法来确保,不会被回放和中间人攻击。关于安全性你可以在这里了解更多。

数据模型所使用的授权服务很广泛。以Salesforce为例,看起来非常不同于Stormpath数据模型,正是基于目录,因此,它是通用和灵活的。它值得你为你的应用支持这个数据模型服务。这对于多承租人应用或者SaaS尤其有效。此外,API文档变化很大——你应该确保你在努力开始做事之前细致地了解大纲。

建立用户管理

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

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