用于Express.js的Rest APIvalidation和会话pipe理

我一直在研究RESTful身份validation,而且我仍然不能得到一个非常清晰的想法,我怎么能devise我的networking架构! 我有很多问题没有回答

我希望我的API能够被传送到移动设备和networking,而且我正在使用Express v4

我不想使用基本身份validation,因为很多post都提出了一个简单的方法,或者我可以使用Passport中间件,但是我想使用基于令牌的身份validation或类似的或更好的东西,并且我想进行身份validation,所以我可以更好地理解,但我不知道我该怎么做,或者如果我明白了解!

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

新用户的注册

  • 客户端

发布用户名和密码到服务器(我知道如果你想使连接安全的是使用https连接,否则我会暴露我的凭据,或者你有任何其他选项除了https?否则我将需要使用公共和带有时间戳的私钥,并在发送给服务器之前散列我的凭证??我怎么做呢?或者其他更好的select?)

  • 服务器端

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

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

  • 客户端

由于现在我有令牌ID,我怎样才能存储在我的客户端?

  1. 我应该使用Cookie吗? 如果是的话,这不会违反RESTful? 以及我的手机应用程序如何存储cookie?
  2. 我还有什么其他的select,除了cookie,我不能想到任何!

授权API

  • 客户端

现在,我有令牌ID,每当我想向服务器发送请求时,我都会将其放置在授权头中。

  • 服务器端

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

这是一个快速应用程序授权的标准方式?

对于这篇冗长的文章我感到抱歉,但是我觉得我应该真正掌握authentication和授权,因为它很重要! 我希望有人能纠正我对REST authenticatino的误解,并回答我的问题,或者build议我一个更好的方法来做到这一点!

  • 发送通过https编码的用户凭证
  • 要比较客户端的令牌,您可以将其保存在映射中,或保存在与用户ID对应的Redis存储中,并与其匹配以考虑用户身份validation。 它并没有杀死rest的意义,因为授权令牌只是到期之后的会话
  • Express没有任何特定或标准的授权方法,它只允许你在后端使用任何数据库来执行你的应用程序所要求的authentication和授权