经常看到接口请求中,有如下的鉴权使用方式
# 发送get请求,加鉴权 -- Basic Auth
from requests.auth import HTTPBasicAuth
requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'password'))
# 发送get请求,加鉴权 -- Digest Auth
from requests.auth import HTTPDigestAuth
requests.get('https://api.github.com/user', auth=HTTPDigestAuth('user', 'password'))
它们有什么区别呢?实际上在做接口测试时,在postman中authorization配置中可以看到两者的配置字段,如下
basic auth的配置
digest auth的配置
basic认证是把用户和密码通过base64加密后发送给服务器进行验证。过程如下
1、客户端向服务器请求数据:
GET / HTTP/1.1
Host: www.myrealm.com
2、服务端向客户端发送验证请求401:
HTTP/1.1 401 Unauthorised
Server: bfe/1.0.8.18
WWW-Authenticate: Basic realm="myrealm.com"
Content-Type: text/html; charset=utf-8
3、客户端收到401返回值后,将自动弹出一个登录窗口,等待用户输入用户名和密码
将“用户名:密码”进行BASE64加密后发送服务端进行验证:
GET / HTTP/1.1
Host: www.myrealm.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx
4、服务端取出Authorization请求头信息进行解密,并与用户数据库进行对比判断是否合法,合法将返回200 OK。
Basic认证过程简单,每次请求都有发送密码。安全性较低。
为了解决Basic模式安全问题,HTTP1.1时提出了Digest模式,它的基本原理是把服务器响应的401消息里面的特定的值和用户名以及密码结合起来进行不可逆的摘要算法运算得到一个值,然后把用户名和这个摘要值发给服务器,服务通过用户名去 在自己本地找到对应的密码,然后进行同样的摘要运算,再比较这个值是否和客户端发过来的摘要值一样。
其过程如下
1. 客户端访问一个受http摘要认证保护的资源。
2. 服务器返回401状态以及nonce等信息,要求客户端进行认证。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
qop的auth表示鉴别方式,nonce是随机字符串;opaque服务端指定的值,客户端需要原值返回。
3. 客户端将以用户名,密码,nonce值,HTTP方法, 和被请求的URI为校验值基础而加密(默认为MD5算法)的摘要信息返回给服务器。
即客户端要携带以下请求头信息
Authorization: Digest
username="Mufasa", ← 客户端已知信息
realm="testrealm@host.com", ← 服务器端质询响应信息
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", ← 服务器端质询响应信息
qop=auth, ← 服务器端质询响应信息
nc=00000001, ← 运行认证次数
cnonce="0a4f113b", ← 客户端计算出的客户端nonce
response="6629fae49393a05397450978507c4ef1", ← 最终的摘要信息
opaque="5ccc069c403ebaf9f0171e9517f40e41" ← 服务器端质询响应信息
4. 如果认证成功,则返回相应的资源。如果认证失败,则仍返回401状态,要求重新进行认证。
它的好处就是不必把具备密码的信息对外传输,只需将这些密码信息加入一个对方给定的随机值计算哈希值,最后将哈希值传给对方,对方就可以认证你的身份。
reference:
https://blog.csdn.net/enweitech/article/details/89468297?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
网友评论