10 分钟带你了解鉴权那些事
前言:
- 鉴权是自动化测试路上的拦路虎,相信大部分同学都深有体会,今天我们就讲一讲这个鉴权到底是怎么回事。
一、什么是鉴权,为什么要鉴权
- 鉴权:是指是指验证用户是否拥有访问系统的权利。
- 为什么要鉴权:对用户进行鉴权,防止非法用户占用网络资源,非法用户接入网络,被骗取关键信息。
- 本次只讲目前企业常用session+cookie、token鉴权
二. 鉴权方式
- HTTP Basic Authentication
- OAuth(开发授权)
- session+cookie
- token
三. session+cookie
-
鉴权流程
-
鉴权过程详解
2.1、用户注册的时候,客户端提交用户名和密码,服务端会存储用户名和密码,为了防止被脱库,密码存储一般会进行加密存储,比如md5、rsa加密等待。
2.2、注册完成后,用户发起登陆,客户端提交用户名和密码,服务端会对用户提交的数据进行校验,用户名和密码正确,此时服务端会根据用户信息(用户id,用户名,user_agent)等创建一个session,并存储在数据库中(一般是存储在redis中),保存好之后,服务端会将这个session通过响应头的Set-cookie字段返回给客户端。
2.3、客户端收到服务端的响应,浏览器会自动将响应头Set-cookie的内容添加到请求头的cookie中(代码实现要手动添加,或者使用其他创建session的方式自动添加),在请求其他接口时会始终携带这个这个请求头。
2.4、服务端收到客户端发起的请求后,会从请求头中将session提取出来与之前存储到redis中的session进行对比,如果一致则返回对应的接口数据给客户端,如果不一致或者是超时则不返回接口数据给客户端。
2.5、session鉴权缺点很明显,服务端存储压力较大,需要大量的存储空间来存储session,因此token鉴权就应运而生了。
四. token鉴权流程
-
鉴权流程
-
鉴权过程详解
2.1、用户发起登陆,客户端提交用户名和密码,服务端会对用户提交的数据进行校验,校验通过以后此时会提取用户关键信息(比如用户名密码、用户id、时间戳等信息进行排序、然后再进行签名运算)通过特定的算法生成token,然后将这个token放在响应头里面返回给客户端。
2.2、客户端收到响应结果,然后会从响应结果里面获取token(这个步骤前端工程师完成),然后将token放在请求头token字段中(通常情况下是这个字段,具体由后端决定),再去请求其他接口。
2.3、服务端再次收到客户端,此时服务端会去请求头中取出token,然后对token进行解签,获取到用户关键信息,再去数据库去进行查询是否存在改用户。但凡这个token被修改过,解签就会失败,鉴权就自然失败了。
2.4、服务端鉴权成功就会返回对应接口数据给客户端,鉴权失败就不会返回对应数据。