HTTP认证模式:Basic & Digest

发布时间:2020-07-05 15:00:43 作者:胡壮壮
来源:网络 阅读:4135

一. Basic 认证

  客户端以“ : ”连接用户名和密码后,再经BASE64加密通过Authorization请求头发送该密文至服务端进行验证,每次请求都需要重复发送该密文。可见Basic认证过程简单,安全性也低,存在泄露个人账号信息以及其他诸多安全问题。以下仅为原理演示,不代表真实情况:

  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返回值后,将自动弹出一个登录窗口,等待用户输入用户名和密码

  4. 将“用户名:密码”进行BASE64加密后发送服务端进行验证:

    GET / HTTP/1.1
    Host: www.myrealm.com
    Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx

  5. 服务端取出Authorization请求头信息进行解密,并与用户数据库进行对比判断是否合法,合法将返回200 OK。RFC 2617 规格中Basic认证不发送Authentication-Info头部,Authentication-Info头部是Digest认证中新增的

HTTP认证模式:Basic & Digest

 1 <?php 2   if (!isset($_SERVER['PHP_AUTH_USER'])) { 3     header('WWW-Authenticate: Basic realm="My Realm"'); 4     header('HTTP/1.0 401 Unauthorized'); 5     echo 'Text to send if user hits Cancel button'; 6     exit; 7   } else { 8     echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 9     echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";10   }

HTTP认证模式:Basic & Digest

  

二. Digest 认证

  Digest认证试图解决Basic认证的诸多缺陷而设计,用户密码在整个认证过程中是个关键性要素。

  下为服务端发送的Digest认证响应头部实例及各指令含义说明PHP官方文档中发送WWW-Authenticate头部时各指令之间用了空格,在Chrome下是不会弹出认证对话框的,应该换成”, “或”,“

WWW-Authenticate: Digest realm="Restricted area", qop="auth,auth-int", nonce="58e8e52922398", opaque="cdce8a5c95a1427d74df7acbf41c9ce0", algorithm="MD5"

  下为客户端发送的Digest认证头请求部实例及各指令含义说明:

Authorization: Digest username="somename", realm="Restricted area", nonce="58e8e52922398", uri="/t.php", response="9c839dde909d270bc5b901c7f80f77d5", opaque="cdce8a5c95a1427d74df7acbf41c9ce0", qop="auth", nc=00000001, cnonce="9c30405c3a67a259"

  下面将就摘要计算方法进行说明: 

  1. 算法的一般性表示

    H(data) = MD5(data)
    KD(secret, data) = H(concat(secret, ":", data))
  2. 与安全信息相关的数据用A1表示,则

    a) 采用MD5算法:
        A1=(user):(realm):(password)
    b) 采用MD5-sess算法:
        A1=H((user):(realm):(password)):nonce:cnonce
  3. 与安全信息无关的数据用A2表示,则

    a) QoP为auth或未定义:
        A2=(request-method):(uri-directive-value)
    b) QoP为auth-int:
        A2=(request-method):(uri-directive-value):H((entity-body))
  4. 摘要值用response表示,则

    HTTP认证模式:Basic & Digest

    a) 若qop没有定义:
        response
        = KD(H(A1),<nonce>:H(A2))
        = H(H(A1),<nonce>:H(A2))
    b) 若qop为auth或auth-int:
        response
        = KD(H(A1),<nonce>:<nc>:<cnonce>:<qop>:H(A2))
        = H(H(A1),<nonce>:<nc>:<cnonce>:<qop>:H(A2))

    HTTP认证模式:Basic & Digest

     

三. 安全风险


推荐阅读:
  1. Promise的实现思路是什么
  2. ECMA Javascript中this有什么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

用户名 服务器 安全性

上一篇:将项目从JBOSS 6 迁移到 JBOSS 7所遇到的问题

下一篇:简单介绍GNS3

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》