WEB认证模式:Basic & Digest

一. HTTP 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,至于是否发送Authentication-Info头部则是可选的
 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   }

二. Digest 认证

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

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

WWW-Authenticate:Digest realm="Restricted area", qop="auth,auth-int", nonce="58e8e52922398", opaque="cdce8a5c95a1427d74df7acbf41c9ce0", algorithm="MD5"
  • WWW-Authenticate:服务端发送的认证头部
  • qop:质量保证,在摘要质询中用来告知客户端服务端支持的认证算法列表;在响应中其值可为auth或auth-int,auth-int包含对实体主体做完整性校验,qop未定义则默认为auth
  • nonce:服务端产生的一次性随机数,用于服务端对客户端的确认,防止重放攻击。RFC2617建议采用这个随机数计算公式:nonce = BASE64(time-stamp MD5(time-stamp “:” ETag “:” private-key)),服务端可以决定这种nonce时间有效性,ETag(URL的Entity Tag,在cgi编程中通常需要自行生成ETag和鉴别,用于标示URL对象是否改变,区分不同语言、Session、Cookie等)可以防止对已更新资源版本(未更新无效,故需要考虑时间新鲜度)的重放请求,private-key为服务端私有
  • opaque:这是一个不透明的(不让外人知道其意义)数据字符串,在盘问中发送给客户端,客户端会将这个数据字符串再发送回服务端器。如果需要在服务端和客户端之间维护一些状态,可以用这个参数传送状态给客户端。
  • 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"
  • cnonce:客户端产生的一次性随机数,用于客户端对服务器的确认
  • nc:让服务端能够通过维护请求次数,检测到重复请求。如果相同的nc出现在两次请求中,那么这两次请求即为重复请求。所以对于防止重放攻击而言,除了nonce之外,nc才是最后的保证
  • Authorization-Info:(略,此处包含nextnonce、rspauth响应摘要等)

  下为算法说明:

  1. H(v1) = MD5(v1),将v1进行MD5编码
  2. KD(v1, v2) = MD5(v1 : v2),将v1和v2用冒号”:”连接后进行MD5编码
  3. A1表示包含安全信息的数据块,A1=(user):(realm):(password)
  4. QoP(保护质量),对不包含安全信息的数据设置保护方式,可选项:auth、auth-int
  5. A2表示不包含安全信息的数据块,根据qop值确定:

    a) QoP=auth或undefined时,A2=(request-method) : (uri-directive-value)
    b) QoP=auth-int时,A2=(request-method) : (uri-directive-value) : H((entity-body))
  6. 老摘要算法:兼容RFC2069,在没有qop选项时使用

    KD(H(A1), (nonce) : H(A2))
    = MD5(MD5(A1) : (nonce) : MD5(A2))
    = MD5(MD5((user) : (realm) : (password)) : (nonce) : MD5((request-method) : (uri-directive-value)))
  7. 新摘要算法:新摘要算法为推荐方式,包含了对随机数计算和对称认证的支持。只要qop为auth或auth-int,就要使用这种方式
    KD(H(A1), (nonce) : (nc) : (cnonce) : (qop) : H(A2))
    = MD5(MD5(A1) : (nonce) : (nc) : (cnonce) : (qop) : MD5(A2))
    = MD5(MD5((user) : (realm) : (password)) : (nonce) : (nc) : (cnonce) : (qop) : MD5((request-method) : (uri-directive-value) : MD5((entity-body))))
时间: 2024-08-26 13:51:11

WEB认证模式:Basic & Digest的相关文章

HTTP认证模式:Basic & Digest

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

Http authentication(BASIC, DIGEST)

Http authentication....BASIC: In the context of an HTTP transaction, basic access authentication is a method for a web browser or other client program to provide a user name and password when making a request.[1] Before transmission, the user name is

关于Citrix与RSA认证结合认证模式

在一些项目中,Citrix的项目除了AD的常用身份认证之外,客户还希望集成RSA等类似的双因素身份验证解决方案.实现Citrix与RSA结合的认证模式主要有三种: 1) 仅使用RSA认证登陆,就可以访问应用程序,类似智能卡认证模式: 2) 在认证登陆界面上,同时输入User Name.Password.PassCode的认证模式: 3)实现分步登陆模式,首先由RSA的Web界面使用RSA的PassCode登陆,然后由Citrix的Web界面使用User Name.Password登陆.或者是先通

web应用模式

web应用模式 在开发web应用中,有两种应用模式:1.前后端不分离 2.前后端分离 api接口 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本. 目前市面上大部分公司开发人员使用的接口服务架构主要有:restful.rpc. rpc: 翻译成中文:远程过程调用[远程服务调用]. http://www.lufei.com/api post请求 action=get_all_st

Java Web开发模式

一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技术.但是开发人员又走向了另一个极端就是完全放弃了Servlet. 在JSP页面混合使用HTML标记和java代码编写的脚本元素标记来开发Web程序.采用这种方法虽然可以编写JSP页面变得简单,直观,然而,他只适合于业务流程简单,系统规模较小的应用系统. 如果系统较大的话,就会出现两个严重的缺点: 1

vsftpd服务程序的三种认证模式

vsftpd服务程序的三种认证模式的配置方法--匿名开放模式.本地用户模式以及虚拟用户模式.了解PAM可插拔认证模块的原理.作用以及实战配置方法,通过实战课程进一步继续学习SELinux服务的配置方法,扩展学习TFTP简单文件传输协议理论及实操课程 文件传输协议 一般来讲,人们将电脑联网的首要需求就是获取资料,而文件传输是其中非常重要的方式之一,21世纪的互联网是由几千万台个人电脑.工作站.小型机.大型机等等不同型号.架构的物理设备共同组成的,即便是个人电脑上也可能会装有诸如Linux.Wind

使用Micrisoft.net设计方案 第三章Web表示模式

第三章Web表示模式 体系结构设计者在设计第一个作品时比较精简和干练.在第一次设计时,并清除自己做什么,因此比较小心谨慎.第二个作品是最危险的一个作品,此时他会对第一个作品做修饰和润色,以及把第一次设计的边缘性设计思想都用在第二个作品,结果导致设计过头. 最初的Web很简单,只是有几个简单的Html页面组成,实现信息共享.随着业务的发展,需要根据业务来决定显示什么,于是开发了CGI编程,把大量的业务逻辑写到CGI中,然后输出到页面.随着发展,CGI编程模式受到了挑战,不能满足发展的需求,于是开发

笔记 - web开发模式

JavaBean JavaBean,  咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提供无参数的构造方法 2)类中属性都必须私有化(private) 3)该类提供公开的getter 和 setter方法 JavaBean的作用: 用于封装数据,保存数据. 访问javabean只能使用getter和setter方法 JavaBean的使用场景: 1)项目中用到实体对象(entity)符

认证模式之Spnego模式

Spnego模式是一种由微软提出的使用GSS-API接口的认证模式.它扩展了Kerberos协议,在了解Spnego协议之前必须先了解Kerberos协议,Kerberos协议主要解决身份认证及通信密钥协商问题.它大致的工作流程例如以下: ①client依据自己username向密钥分发中心KDC的身份认证服务AS请求TGS票证. ②AS生成一个TGS票证.查询相应用户的password,然后通过用户password将TGS票证加密,响应给client. ③client通过用户password解