基于http的身份验证手段(cookie,session,token)

1、发展历程
(1)cookie(cookie 是身份证的一种手段,数据载体,存在每个http请求中,把session放在cookie中送到客户端会更安全)
http是无状态的,因此需要在请求中加入用户名和密码才能保持登录。Cookie就是可以实现每次http请求都自动带数据给服务器的技术。
浏览器与服务器约定,如果某次HTTP响应中的状态需要保存,浏览器第一次访问服务器产生cookie的流程:
1 cookie(相当于状态)在服务器端生成的(意味着浏览器第一次访问服务器的时候是没有cookie值的)
2 服务器需要手动将状态数据设置为HTTP响应头Set-Cookie的值
cookie的设置和组成
3设置好了之后会自动的向浏览器返回,浏览器会自动解析出HTTP响应头Set-Cookie的值,并按需保存在内存或硬盘中。
4 浏览器再次请求服务器时,会自动将之前保存的Set-Cookie值从内存或硬盘中取出,并加入到HTTP请求头Cookie中,发送到服务器。
5 服务器收到浏览器请求后,需要手动解析HTTP请求头Cookie的值,进行状态校验等操作, 做验证 如果验证成功,则说明用户曾经来过, 不成功说明第一次来
缺点:不安全,会被人拦截到账户名和密码。
(2)SESSION (诞生并保存在服务器端的)
浏览器访问服务器就是会话的开始,会话的结束不确定,因此不同的网站对与每个用户的会话都设定了时间(会话结束时间)以及唯一的id (Session ID)。因为是服务器自己定义的东西,因此一般会保存在数据库中。
服务器设置cookie,并且把Session ID加入到cookie中,再把会话结束时间对应设置为这个cookie的有效期。浏览器拿到cookie后进行保存。
Session ID是一串没有规律的字符串,其次服务器在发送cookie之前会对这个函数Session ID cookie进行签名,如果黑客修改了Session ID,Session ID就会变成服务器识别不了的字符串。
Cookie失效代表会话结束,用户就要重新输入账号密码了。
(3)JWT:JSON web token
用户第一次登录网页时服务器就会生成一个jwt,服务器不需要保存jwt,只需要保存JWT签名的密文,接着把JWT发送给浏览器,可以让浏览器以cookie或者Storge的形式存储,若是以cookie形式保存下来,那么用户每次发送请求都会把这个JWT发给服务器,用户就不需要重新输入账号和密码了。和Session很类似,但是这里的token只不过是存储在用户那边。
安全性:jwt主要由三部分(header.payload.signature)组成,具体是header(使用什么算法生成签名).payload(一些特定的数据如有效期等).signature,header和payload和两部分的内容会经过Base64编码,服务端会保存密码,它会结合上述两段编码进行算法(header声明的算法)运算,最终得到签名信息(signature)。这样一个完整的jwt就可以发送给客户端了,三个部分是相互关联,修改其中一个字符,整个JWT都会出错,有一定安全性。
2、token如何识别是个人信息的?
(1)登录
在浏览器第一次输入账户名和密码进行登录时,当服务器识别到HTTP的body/url参数中的用户名密码和数据库的一致时,就会生成token变量(使用jwt.sign进行生成),生成需要三个部分header,payload,signature,然后就把token发送给客户端。客户端收到token后会存储到Cookie或者Local Storage。
(2)访问和用户信息关联的页面
客户端每次向服务端请求资源的时候需要带着服务端签发的token。
假设用户已经登录了,就可以使用token来登录个人信息相关路径了(如/vip路径),请求该路径时,客户端将token放在body中,然后服务端使用jwt.verify来验证body中的token是否正确,服务端会用指定的服务器密码,如果成功就提示

3、总结和区别
(1)cookie(数据载体,存在每个http请求中把session放在cookie中送到客户端)
(2)SESSION (诞生并保存在服务器端的)
(3)token是由服务器产生,但是存储在客户端的,可以放在cookie或者Storge中,持有token可以允许访问服务器。

4、演示
使用postman

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值