美文网首页
basic auth和digest auth比较

basic auth和digest auth比较

作者: mysimplebook | 来源:发表于2020-10-09 20:03 被阅读0次

            经常看到接口请求中,有如下的鉴权使用方式

            # 发送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

    相关文章

      网友评论

          本文标题:basic auth和digest auth比较

          本文链接:https://www.haomeiwen.com/subject/cuqrpktx.html