【发布时间】:2014-07-26 15:02:53
【问题描述】:
我一直在研究 RESTful 身份验证,但我仍然没有很清楚的想法,我该如何设计我的 Web 架构。我有很多问题没有答案。
我希望我的 API 也可以用于移动和网络,我正在使用 Express v4。
我不想使用基本身份验证,因为许多帖子都建议作为一种简单的出路,或者我可以使用 Passport 中间件,但我想使用基于令牌的身份验证或类似或更好的东西,我想进行身份验证,以便我可以更好地理解,但我不确定如何实现。
我将在下面简化我的预期身份验证架构:
新用户注册
- 客户端
将用户名和密码发布到服务器 (我知道如果你想使连接安全是使用 https 连接,否则我将公开我的凭据,或者你有除 https 之外的任何其他选项?否则我将需要使用带有时间戳和哈希的公钥和私钥在发送到服务器之前我的凭据?我该怎么做?还有其他更好的选择吗?
- 服务器端
使用salt加密算法对密码进行哈希处理,并将哈希后的密码和salt存储起来,然后生成一个token ID并发送给客户端,token ID存储在session中还是使用REDIS数据库?
使用会话不是又违反了 REST 吗?但是,如果我不使用会话,如何存储令牌 ID 并与客户端进行比较?
- 客户端
既然我有了token ID,我该如何在客户端存储呢?
- 我应该使用cookie吗?如果是,这会违反 RESTful 吗?我的移动应用程序如何也存储 cookie?
- 除了 cookie 我还有哪些其他选择?我想不出来。
授权 API
- 客户端
现在,我有了令牌 ID,每次我想向服务器发出请求时,我都会把它放在授权标头中。
- 服务器端
当收到请求时,服务器会检查token API,并与会话token进行比较,如果为真,则请求允许否则拒绝
这是 Express 应用授权的标准方式吗?
很抱歉发了这么长的帖子,但我觉得我应该真正掌握身份验证和授权,因为它很重要。我确实希望有人能纠正我对 REST 身份验证的误解并回答我的问题或建议我更好的方法。
【问题讨论】:
-
我目前正在为同样的问题而苦苦挣扎 - 您是否知道如何以流畅透明的方式实现这一点?有没有办法优雅地剥离所有请求的令牌,以便 API 可以专注于只提供请求的数据?理想情况下,可以将身份验证和授权放在一个中间件中,该中间件在实际 API 之前执行。如果你能花时间解释你最终得到的解决方案,我会很高兴
标签: node.js api rest authentication express