用于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,我怎样才能存储在我的客户端?
- 我应该使用Cookie吗? 如果是的话,这不会违反RESTful? 以及我的手机应用程序如何存储cookie?
- 我还有什么其他的select,除了cookie,我不能想到任何!
授权API
- 客户端
现在,我有令牌ID,每当我想向服务器发送请求时,我都会将其放置在授权头中。
- 服务器端
当收到请求时,服务器将检查令牌API,并将其与会话令牌进行比较,如果为真,则请求允许拒绝
这是一个快速应用程序授权的标准方式?
对于这篇冗长的文章我感到抱歉,但是我觉得我应该真正掌握authentication和授权,因为它很重要! 我希望有人能纠正我对REST authenticatino的误解,并回答我的问题,或者build议我一个更好的方法来做到这一点!
- 发送通过https编码的用户凭证
- 要比较客户端的令牌,您可以将其保存在映射中,或保存在与用户ID对应的Redis存储中,并与其匹配以考虑用户身份validation。 它并没有杀死rest的意义,因为授权令牌只是到期之后的会话
- Express没有任何特定或标准的授权方法,它只允许你在后端使用任何数据库来执行你的应用程序所要求的authentication和授权