一、session认证
1、session认证的过程:
前端输入用户名和密码进行登录操作,后端拿到用户名和密码后,会把md5进行加密,加密之后,拿上加密后的密文到用户表中查找密文是否一致,判断用户是否存在,如果用户存在,则认证通过;认证成功后后端会生成session_id(后端会话当中的一个键,表中的一个key值),将session_id默认保存在会话表,当这条数据一旦记录完之后,会将session_key数据作为session_id放到响应头的set-cookie字段中;
浏览器接下来的操作为:将响应头中的set-cookie字段的值取出来把它放到cookie中,下一次请求接口的时候,浏览器会自动将cookie中的sessionid字段传给后端,而后端将sessionid取出来,去会话表中查找,如果一致登录成功,否则登录失败;如果sessionid时间超时,也会登录失败。
如果没有这种cookies机制,我们不管干嘛都得登录;有cookies机制,只要我们有合法的sessionid,并且sessionid没有过期就可以正常访问。
会话id(session_id)是后端django生成的
2、session认证示意图:
3、session认证机制的特点:
session保存在服务端,大量的用户进行登录操作,数据会存放大量的数据;会增加服务器开销
分布式架构中,难以维持session会话同步
csrf攻击风险
二、token认证
1、token认证的过程:
a、客户端使用用户名和密码请求登录
b、服务器收到请求,去验证用户名和密码
c、验证成功后,服务器会生成一个token,再把token发送给客户端
d、客户端收到token以后把它存储起来,放到会话存储或者本地存储中(浏览器关掉后,存放在会话存储中的内容被清空,本地存储会永久存放,除非手动删除本地存储内容),
e、客户端每次向服务端请求资源的时候需要带着服务端返回来的token
f、服务端收到请求后,去验证客户端请求里面带着的token,如果验证通过,就向客户端返回响应数据
2、token认证示意图:
3、token认证机制的特点:
token保存在客户端,不保存在数据库;不会增加服务器开销,性能更好
跨语言、跨平台
拓展性强
鉴权性能高
cookie是专门保存身份信息的