Express.js的Restful API身份验证和会话管理

Tim*_*Tim 10 authentication api rest node.js express

我一直在研究RESTful身份验证,我仍然无法得到一个非常明确的想法,我如何设计我的Web架构!我有很多问题没有答案..

我希望我的API也可以用于移动和网络,我使用的是Express v4

我不想使用基本身份验证,因为许多帖子建议作为一个简单的出路,或者我可以使用Passport中间件,但我想使用基于令牌的身份验证或类似或更好的东西,我想进行我的身份验证,所以我可以更好地理解,但我不知道我该怎么做,或者如果我理解清楚的话!

我将在下面简化我的预期身份验证架构:

注册新用户

  • 客户端

将用户名和密码发布到服务器(我知道如果你想保证连接安全是使用https连接,否则我会公开我的凭据,或者除了https之外还有其他任何选项?否则我将需要使用公共和私钥与时间戳和哈希我的凭据发送到服务器??,我该怎么办?或其他更好的选择?)

  • 服务器端

使用salt cryptography对密码进行哈希处理,并存储哈希密码和salt,然后生成令牌ID并发送给客户端!并且令牌ID存储在会话中或使用REDIS数据库???

是不是使用会话再次违反REST ??? 但是,如果我不使用会话,我如何存储令牌ID并将其与客户端进行比较???

  • 客户端

从现在开始我有令牌ID,我怎样才能存储在我的客户端?

  1. 我应该使用cookie吗?如果是的话,这不会违反RESTful ??? 我的移动应用程序如何存储cookie?
  2. 除了cookie,我还有什么其他选择,我想不出任何其他选择!

授权API

  • 客户端

现在,我有令牌ID,每次我想向服务器发出请求时,我都会将其放在授权标头中.

  • 服务器端

收到请求后,服务器将检查令牌API,并将其与会话令牌进行比较,如果为true,请求允许否则拒绝

这是Express应用程序授权的标准方法吗?

我很遗憾这篇冗长的帖子,但我觉得我应该掌握认证和授权,因为它很重要!我希望有人可以纠正我对REST authenticatino的误解并回答我的问题或建议我更好的方法来做到这一点!

小智 1

  • 发送通过 https 编码的用户凭据
  • 要在客户端比较令牌,您可以将其保存在映射中或与用户 ID 对应的 Redis 存储中,并匹配它以考虑用户已通过身份验证。它不会消除 Rest 的重要性,因为在 Rest 中,授权令牌只是会话,在过期后
  • Express没有任何特定或标准的授权方法,它仅允许您使用后端的任何数据库来根据应用程序的需要执行身份验证和授权。