第 61 题:介绍下如何实现 token 加密
Token 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Token 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(14)
来自知乎饥人谷若愚的图片,点击预览
传统身份验证的方法
HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。
解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个 Cookie ,这样服务端会验证一个这个 Cookie 里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。
上面说的就是 Session,我们需要在服务端存储为登录的用户生成的 Session ,这些 Session 可能会存储在内存,磁盘,或者数据库里。我们可能需要在服务端定期的去清理过期的 Session 。
基于 Token 的身份验证方法
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
token为什么要加密?
这篇应该主要问的是token是怎么生成的:
加密看设计架构了,
一类存储token关联用户使用不可逆加密算法,像md5之类的
二类token内包含用户基础信息则要采用可逆算法,各种可解密算法都可以
认证方案:
JWT认证token是无法做到自注销的
session内存相关开销太大,不适合分布式,还有CSRF的问题
后端 使用一个固定秘钥加密用户标识(uid)+创建token时间(ttl) 通过对称加密(收到客户端提交的token需要解开所有使用堆成加密)的加密算法生成一个字符串,这个字符串就是一个token,每次客户端请求都将token放到请求头header中(body参数也可以,无所谓在哪),服务器端收到该请求并使用相同的秘钥解开token,查看token是否过期,也可以通过token中的uid和其他参数比较验证用户的合法性(例如:请求参数中也有一个uid必填参数,这样就可以对比两个uid是否相同,如果相同则说明是同一个人,如果单纯的只验证token,只要另外的用户拿到了没过期的token就可以伪造用户身份进行服务器端api的请求)
认识JWT
后端通过随机数加签名生成一个token,前端拿到token后通过拦截器在接口调用时添加token。
@zeroone001 不是很清楚的知道这道题答案是啥了。。。
相关参考文章:
这边也是这么做的,后端根据token来查权限和是否登录以及失效等
jwt举例
加点随机数算法,后台配合对应解密算法。
这个题目是问: 生成token的方法,比如 JWT,还是说利用加密算法,比如对称加密或者非对称加密 加密生成后的token ?