Node.JS RESTful API的最佳身份验证方法

3
我需要构建一个网络应用和一个iOS移动应用,它们共享同一个数据库。目前我正在考虑使用RESTful API,并让两个应用程序(web和iOS)通过API进行通信以访问数据。我的问题是应该使用什么身份验证方法。我一直在研究OAuth2.0,但那不是我想要的东西,因为我不希望用户在使用Facebook或Google+登录时授权连接。我只想使用用户名和密码进行登录,然后保持登录状态。这适用于两个应用程序(web和iOS)。我正在使用Node.JS和MongoDB构建API。我试图以“正确的方式”做事,因为这应该是我的硕士论文的最终项目。你们能告诉我如何实现这个吗?
2个回答

5
使用OAuth 2.0可获得可扩展的标准和基于令牌的身份验证,使用户能够撤销身份验证票据,例如如果他们的手机被盗。
OAuth 2.0支持各种授权类型。来自Facebook和Twitter登录的那些可以总结为“3-legged oauth”,但还有两种用于2-legged OAuth的授权类型,尤其是资源所有者密码凭证授权(页面末尾的第4.3节),它将简单地交换用户名和密码以获取身份验证令牌。如果不想要实现3-legged oauth,则没有必要。
我建议在大多数用例中使用存储在数据库中的令牌,而不是基于加密的自我验证令牌。在实践中,撤销单个授权或特定客户端应用程序的所有授权的可能性非常有帮助。它还大大缩短了令牌,并减少了由于实现中的缺陷而导致的灾难性安全泄漏的风险。确保令牌本身是加密强壮的随机值,并使用一个简单的加密包装器包装实际令牌值,以便便宜地识别(糟糕的)伪造令牌。

谢谢您的回答!我只有一个与您的答案相关的问题。保留存储在数据库中的令牌是否违反了RESTful的原则?RESTful是无状态的,而在我看来,保留具有令牌的数据库并不是无状态的。您能否澄清一下这个问题? - IgorSousaPT
1
在某种程度上,身份验证始终是有状态的:您必须首先进行身份验证,获取票证,然后执行请求。服务器是存储票证还是创建自我验证的方式对客户端来说是透明的。 - mnemosyn

0

类似 Passport(不是威士忌,而是中间件)这样的东西可能是一个不错的测试对象

它可以轻松透明地选择许多不同的身份验证方法


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接