我的查询如下,我想管理用户会话,也就是一个账户,各有各的东西,我也想保护我的api,做了一些研究,我看到我可以在nodejs中使用jwt和sails要管理会话,我还看到使用护照可以做到这一点,现在好了,关于 api 保护,我已经看到可以使用 jwt 完成。
- 对于那些已经使用过它的人,还有哪些其他替代方法可以管理会话(我看到护照已停产),根据您的经验,您会选择哪一个,对于 API 保护也是如此。
我的查询如下,我想管理用户会话,也就是一个账户,各有各的东西,我也想保护我的api,做了一些研究,我看到我可以在nodejs中使用jwt和sails要管理会话,我还看到使用护照可以做到这一点,现在好了,关于 api 保护,我已经看到可以使用 jwt 完成。
- 对于那些已经使用过它的人,还有哪些其他替代方法可以管理会话(我看到护照已停产),根据您的经验,您会选择哪一个,对于 API 保护也是如此。
首先,我们应该讨论会话和基于令牌的身份验证系统之间的区别。在这种情况下是 JSON Web Token。
主要区别在于 JWT 是无状态的,即服务器不维护通信客户端的状态。另一方面,会话可以。也就是说,对于会话,客户端仅被验证一次(至少在会话过期之前),但服务器需要从该客户端保留最少量的数据来维护会话,另一方面,需要在每个会话中发送一个令牌请求服务器对请求进行身份验证/验证。
将代币想象成俱乐部手镯(您之前已经购买过),只要您在入口处出示手镯,您就可以随意进出俱乐部。届时,俱乐部的责任是能够验证手链,也就是说,知道它是否是原创的,并且不是您自己制作的。俱乐部不在乎你在哪里买的,你叫什么名字,或者你进出多少次,重要的是能够定义手链(令牌)是否为真。当然,所有这些都是在身份验证的背景下进行的。
对于 API,使用 JSON Web Token 有几个优点:
JWT 是自包含的,它们在自身内部携带信息,例如用户信息。这可以节省您的数据库查询。
它们可以很容易地转移到任何地方。这很有用,例如,如果您有多个微服务并且您希望多个客户端(Web 应用程序和移动应用程序)使用相同的令牌进行身份验证。所涉及的服务器知道
salt
用于在令牌上应用散列的服务器就足够了。由于它是一个标准,因此您可以将它与不同类型的平台和编程语言一起使用。
如果您使用的是 expressjs。一个好的起点是
express-jwt
.虽然 Jared Hanson 仍然没有官方声明,但可以推断是从最后一次提交的日期(5 月 4 日)开始。
用 JWT 做这件事真的很简单。您只需要生成一个令牌和一个中间件来检查每个对 API 的请求中的令牌。
好处
例子
我们需要做的第一件事是对用户进行身份验证。为此,我们在我们的 API 中为它映射一个路由;比方
https://example.com/api/auth
说所需的包 - express - body-parser - 方法覆盖 - jsonwebtoken - bcrypt-nodejs
身份验证和令牌创建
中间件
接下来,我们必须编写中间件来检查每个请求的令牌。
最后,将该中间件与 API url 关联起来: