Express.js的静态API身份验证和会话管理
我一直在研究RESTful身份验证,但是仍然不清楚,我如何设计Web架构。我有许多未解决的问题。
我也希望将我的API也提供给移动设备和网络,并且我正在使用Express v4。
我不想使用基本身份验证,因为许多帖子都建议使用简单的方法,或者我可以使用Passport中间件,但是我想使用基于令牌的身份验证或类似或更高级的东西,所以我想我的身份验证,因此我可以更好地理解,但不确定如何实现。
我将在下面简化我打算使用的身份验证体系结构:
新用户注册
- 客户端
将用户名和密码发布到服务器(我知道您是否要确保连接的安全性是使用https连接,否则我将公开我的凭据,或者除https之外还提供了其他选项?否则我将需要使用带有时间戳和哈希的公钥和私钥发送到服务器之前我的凭据吗?我该怎么做?还有其他更好的选择吗?
- 服务器端
[使用salt密码加密密码,并存储哈希的密码和salt,然后生成令牌ID并发送给客户端,并且令牌ID是存储在会话中还是使用REDIS数据库?
使用会话再次违反REST吗?但是,如果我不使用会话,如何存储令牌ID并将其与客户端进行比较?
- 客户端
因为现在有了令牌ID,如何在客户端存储?
- 我应该使用Cookie吗?如果是,这是否违反RESTful?我的移动应用程序也如何存储cookie?
- 除了Cookie以外,我还有什么其他选择?我想不起来。
授权API
- 客户端
现在,有了令牌ID,每次我想向服务器发出请求时,都会将其放在授权标头中。
- 服务器端
[收到请求后,服务器将检查令牌API,并将其与会话令牌进行比较,如果为true,则请求允许其他拒绝
这是Express应用程序授权的标准方法吗?
对于冗长的帖子,我感到抱歉,但是我觉得我应该真正掌握身份验证和授权,因为它很重要。我确实希望有人可以纠正我对REST身份验证的误解,并回答我的问题或建议我做一个更好的方法。
回答如下:- 发送通过https编码的用户凭据
- 要在客户端比较令牌,您可以将其保留在地图中或与用户ID对应的Redis存储中,并对其进行匹配以考虑用户身份验证。它不会杀死Rest的重要性,就像在Rest中一样,授权令牌仅是在过期后才进行的会话
- Express没有任何特定或标准的授权方法,它仅使您可以使用后端中的任何数据库来执行应用程序所需的身份验证和授权