前两天一个前辈的项目告急,临交付前一天才找我说救命,然后给了我20多个接口(妈呀)。。。终于搞定了,阿弥陀佛。他们的接口用的是jwt,之前好像没写过这部分,现在觉得是该记录一下了。
在mvvm火热的今天,许多公司都做SPA产品,其中用户权限是个老生常谈的问题,除了传统的session-cookie,在SPA用的比较多的是json web token(jwt)。
在网络上,我们经常听到token(中文里有叫令牌),通常是我们向服务器提交账户密码之后,服务器伴随用户信息返回的一个加密字段,这个token是身份的凭证,有了这个token,你就拥有权限去使用某些服务或访问某些资源。比如某个企业内部系统,普通员工登陆后,对某个页面只有查看的权限,而管理员除了查看还有修改信息的权限。
权限的设计和管理当然是在后台,但我们这里先不讨论。我们先回想一下,由于http本身是无状态的协议,对于某些需要权限的访问,某次用户访问提供账户密码后,下一次再访问,服务器是不知道他的身份的,这时候又要他提供账号密码了。所以出现了session-cookie的方案:用户登录后服务器生成一个对应session保存用户状态,将之保存在内存(或数据库),返回一个sessionId给客户端。浏览器在响应头提取将相关数据保存在cookie中,下次访问就将cookie放到请求头提交给服务器。通过这种方式,服务器就能识别用户的身份,从而判定用户是否有权限执行某些访问。
但是session机制有一些局限,一个是用户量多的话,对内存开销会很大,相应的的对session计算的开销也变大,而且如果保存在内存,是不利于分布式扩展。另一方面