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

时间:2014-06-05 14:44:22

标签: node.js api rest authentication express

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

我希望我的API也能用于移动和网络,而我正在使用Express v4

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

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

注册新用户

  • 客户端

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

  • 服务器端

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

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

  • 客户端

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

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

    • 客户端

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

    • 服务器端

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的解决方案是使用JWT令牌进行身份验证。您可以在https://medium.com/dev-bits/a-guide-for-adding-jwt-token-based-authentication-to-your-single-page-nodejs-applications-c403f7cf04f4上了解有关JWT的更多信息

使用JWT令牌,您可以拥有一个基于令牌的身份验证系统,在cookie上没有会话UID,但是您必须实现逻辑来处理已签出类似黑名单令牌之类的令牌。