Json Web Token是解决现在前后端分离权限验证的方法之一。
先看几篇参考文章:
在使用session机制的时候,session的本质是在服务器中生成的一段随机字符串,在Tornado的单体应用中我们可以使用set_cookie和set_secure_cookie通过浏览器将session保存到浏览器的cookie中。因为这个步操作是交给浏览器做的,因此前后端分离的情况的时候,这两个方法就是没用的了。不过,我们可以通过接口将session返回给前端,前端下次查询接口带上session也是可以完成前后端分离,我们在后端可以拦截session获取到保存到session中的信息。例如使用itsdangerous来进行加密。
JWT的本质是加密技术,我们在服务器加密生成字符串返回给客户端,客户端保存,下次查询的之后携带上来,服务端进行校验。相比于sesssion保存在服务器,JWT是不用保存的。
下面我们看如何在Tornado中集成JWT,我们以慕课网实战课程为例。
我们使用的模块是pyjwt
生成加密字符串
1 | # 构建 json web token |
我们将用户的id和nick_name设置在payload中。
那把这个加密字符串返回给前端之后 怎么使用呢?这就是要我们重新抒写权限装饰器然后使用这个token了。
下面是我们要改写的装饰器。
1 | def authenticated_async(method): |
上面展示了如何使用我们的jwt。
在需要权限的地方使用了权限装饰器即可。
1 | class GroupHandler(RedisHandler): |
总体使用感觉在Flask中集成itsdangerous库很类似。