我正在使用NodeJS堆栈进行开发创建我的第一个SPA,我来到了设计身份验证并保护应用程序某些部分的地步。
我读了很多关于auth技术的内容,包括JWT,OAuth等,但我仍然没有找到类似«真实世界的例子»。
让我们假设我的任务只是从公共场所保护应用程序的某些部分。我的应用程序不适用于第三方服务,因此我认为不需要使用Google或Facebook身份验证。我想使用登录/密码并使用我自己的数据库服务器存储所有这些数据
我不明白认证无状态的意义。我得出一个简单的结论,我可以用这种方式设计身份验证:
可以吗?如果我们需要使令牌无效,JWT需要额外的实现,我看到了不同的示例,所有这些示例都基于存储无效的令牌,但如果我们只能存储有效代币?通过实施此存储,我们已经失去了无国籍状态
我看到我可以使用cookie而不是上面描述的实现,但我不喜欢在RESTful应用程序中使用cookie,因为它实际上取决于类似浏览器的客户端环境。
在服务器上存储令牌有什么缺点?
答案 0 :(得分:0)
我已经实现了一个需要用户身份验证的项目,并且令牌存储在数据库中。
您可以找到示例here。
答案 1 :(得分:0)
您正在使用会话cookie描述传统的身份验证方法。服务器为由sessionid
标识的每个连接用户存储会话。 sessionid
由客户端存储在cookie中,并在每个后续请求中发送以识别用户。
您可以在浏览器或移动设备中完美地使用此方法(使用设备存储而不是cookie)
缺点是需要许多服务器资源来保持会话打开,并且需要在每次身份验证时查询数据库以检索用户数据。这就是JWT解决的问题。用户信息本身就是令牌,并且是可靠的,因为它是用服务器的密钥签名的。
JWT有其自身的缺点,例如,如果您需要一个撤销列表,它就没有用,因为它们需要服务器存储。