什么是鉴权
鉴权也叫身份认证,指验证用户是否有系统的访问权限。就很像我们经常乘坐动车的票据(对应的标识,一定的时间范围)。
认证方式
接下来介绍几种我们工作中通常用到的认证方式。
Session-Cookie 认证
利用服务端的 Session(会话)和浏览器(客户端)的 Cookie 来实现的前后端通信认证模式。
来源
由于 HTTP 请求时是无状态的,服务端正常情况下无法得知请求发送者的身份。这个时候如果我们要记录状态,就需要在服务端创建会话,将相同客户端的请求都维护在各自的会话记录中,每当请求到达服务端时,先校验请求中的用户标识是否存在于 Session 中,如果有则表示已经认证成功,否则表示认证失败。
流程
实践
boss(我们的一个产品) 这边 Session ID 存在数据库里面,在 Memcached 里面做缓存。客户端每次调用接口的时候会通过 response headers 里面的 Set-Cookie 更新过期时间(boss 这边设置的是 6 个小时),这样做的作用是防止你在做一些复杂操作的时候,cookie 突然过期。
⚠️整个过程是比较重的,因为每次的接口调用都得更新过期时间。
优缺点
优点:
- 简单易用,浏览器会自动带上
缺点:
- 脱离浏览器没法用,比如原生应用
关于 Cookie 的安全问题
Cookie 属性:
提高安全性的办法
-
Expires/Max-Age 设置合理过期时间
-
HttpOnly 设置