我应该使用什么来在我的REST API中验证我的用户?

时间:2016-11-10 03:46:38

标签: node.js authentication express jwt

我计划在我的REST API上使用JWT对我的用户进行身份验证(用nodejs编写,使用express),但我看到互联网上有人说它不安全。

真的不安全吗?什么是更好的选择?

3 个答案:

答案 0 :(得分:0)

通行证最适合您的用户身份验证。

答案 1 :(得分:0)

JWT只是一种令牌,而不是身份验证/授权协议。使用JWT可能是安全的或不安全的,这取决于您如何使用它。 JWT是OIDC使用的本机令牌。 您可能会将JWT通常用作值标记,这可能不如参考标记安全。 请参阅here以获得更清晰的解释。

在评论中,您询问使用什么是基本的HTTP身份验证(仅使用JWT而不是uuencode(用户:密码)作为令牌)。只要通信得到适当保护(https使用TLS> = 1.1),基本身份验证没有任何问题,但使用此类身份验证存在严重限制。 任何需要用户名和密码的API身份验证意味着应用程序的每个客户端都需要拥有自己的用户(主体)。在我链接的论文中,基于身份验证的整个协议栈旨在解决API遇到的几个问题。两个主要的是:

联盟:用户只需登录一个中央系统,无需再为每个信任中央系统的系统登录。

委托:用户将权限委托给第三方,以允许它仅执行特定任务(而不是其他任务)。可以单独撤销此权限,而无需更改其他第三方的权限或更改密码。

联盟是一项功能,可让您使用Facebook或Google帐户登录StackOverflow而无需提供密码。委派允许您指定StackOverflow可以对您的Facebook或Google帐户执行的操作(例如,获取您的个人信息但不发布)。代表团在联邦之上工作。

所有这一切的问题在于它使您的API更难以访问:为客户端提供用户名和密码,而不是让用户使用客户端登录身份系统并允许客户端使用API​​。 如果您的系统是具有单个客户端应用程序的B2B API,那么仅使用身份验证就可以。如果您的API以任何方式涉及用户或者意图被第三方应用程序使用,那么您实际上别无选择,只能实现整个安全堆栈(即OIDC和OAuth)。堆栈设计有一个(好的)原因,它可以帮助你解决它已经解决的相同问题。

答案 2 :(得分:0)

在大多数情况下,安全特性取决于实际的实现,而不是使用的规范或概念。你可以拥有安全的JWT实施,你也可能失败......

阅读critical vulnerabilities in JSON Web Token libraries,了解一些实施所暴露的JWT相关漏洞的一些例子,不是因为实际规范,而是因为它们如何实现它以及开发人员最终如何使用它们。

身份验证是一个始终在不断发展的难题,因此安全的实施需要时间和资源来实现。如果你真的关心安全性最好的推荐(替代方案)就是尽可能多地将委托给某个或完全专注于它的人。

这也将使您有更多时间专注于解决使您开始构建应用程序的业务问题。 我建议看看Auth0,但我非常喜欢它,所以我最终在那里工作,所以我有偏见。

相关问题