发现一篇介绍HTTP认证的好文章,就尝试翻译了一下,记录在下面。(翻译的很挫,哈哈哈)

原文: http://frontier.userland.com/stories/storyReader$2159

=====================================================================================================

HTTP 认证(Authentication) 模式

简介

这篇文章描述了HTTP客户端认证(authentication )的两种模式,本文假设你已经熟悉了HTTP请求、响应、状态码和消息头的结构。

HTTP Access Authentication Framework(HTTP访问认证框架)

HTTP协议(RFC 2616)定义了一种简单的访问认证模式。 假设有某一组网页,它们通常作为一个被保护的领域被引用,或者仅仅对能够对服务器验证提供凭证的用户开放访问。
如果一个HTTP客户端(例如一个web浏览器),请求一个属于一个被保护领域的页面,服务器会响应401,并在响应中包含一个 WWW-Authenticate 头信息。 这个头信息必须包含至少一个适用于被请求页面的 认证质询(authentication challenge)。
下一步,客户端发送另一个请求,这次请求会含有一个认证头属性(Authentication header field ),它包含客户端对服务器认证质询(authentication challenge)的凭证(credentials )。
如果服务器接受到这个凭证,它响应被请求的页面。 另一方面,它返回另一个401响应来表明客户端的凭证是无效的。
真正的WWW-Authenticate和认证头属性的内容依赖于使用的认证模式。写作这篇文章时,有两种认证模式被广泛使用。

Basic Access Authentication

basic authentication 模式假设你(浏览器)的认证包含一个用户名(username)和一个密码(password),密码只对你和服务器可知。
服务器的401响应包含一个由”Basic”字符和一个可以指定被保护领域名称的名值对构成。
例如:WWW-Authenticate: Basic realm="Control Panel"
当接受到服务器的401响应后,你的浏览器提示你输入关联到这个领域的用户名和密码。如下图:

你接下来发送的请求的认证头信息包括字符”Basic”和一个base64编码的一个字符串(它是由 用户名,冒号(:)和密码组成),例如
Authorization: Basic QWRtaW46Zm9vYmFy
QWRtaW46Zm9vYmFy 编码之前应该类似于 zhangsan:123456
服务器以base64解码客户端发来的凭证并与数据库比对,如果正确,那么你就登录进来了。
basic authentication 模式最大的缺点在于对于窃听者来说很容易窃取到你的密码,因为它是通过明文传输的。

Cryptography to the Rescue!(使用密码学来解决)
另外一种可用的认证模式叫做 摘要认证(digest authentication ), 它通过使用加密来弥补明文传输的缺点,通常是使用MD5报文摘要算法(FRC 1321)。
MD5可以将任意长度的字符串计算为128位的数字, 因为MD5是单向的,本质上来说是不可能通过密文得到最初的结果的(不可逆)。
现在,如果你像basic认证中那样将用户名和密码使用md5加密后发送给服务器,那么很显然一个窃听者可以记录你加密后的用户名和密码。当这个窃听者向服务器请求认证时,它可以简单地把这个加密后的用户名和密码发送给服务器,并最终登录成功。 这叫做 重放攻击(replay attack)。

Digest Access Authentication(摘要访问认证)

为了安全的阻止重放攻击(replay attack), 很明显我们需要一个更加复杂的认证过程: 摘要认证模式。
首先,服务器最初的401响应中的WWW-Authenticate头信息中包含着除了认证范围(realm)字符串之外的更多的一些名值对,包括一个叫做nonce(number used once 非重复随机数)的值。服务器必须确保每一个401响应中包含一个唯一的,之前未使用的nonce值。
现在你的浏览器在接下来的请求中包含这样的认证头信息,它包含你的明文的用户名,你刚刚在401响应中接受到的nonce值和所谓的摘要请求,摘要请求可能按照下面的方式计算得到(hashMD5为MD5加密):
A1 = string.hashMD5 (username + ":" + realm + ":" + password)
A2 = string.hashMD5 (paramTable.method + ":" + paramTable.uri)
requestdigest = string.hashMD5 (A1 + ":" + nonce + ":" + A2)  (requestdigest 就是计算得到的请求摘要)

在这个计算过程中,所有的计算值要么是服务器已知的要么是请求头信息的一部分,所以服务器可以进行同样的计算,如果它的计算得到(yield)同样的请求摘要(就是上面计算最终得到的requestdigest), 那么就可以确定你拥有正确的密码。
更进一步, 因为MD5算法是不可逆的,窃听者不能够从请求摘要中获得你的密码。同样,服务器能够相当有效的阻止重放攻击(replay attack),因为它不会在超过一次的认证请求中接受同一个nonce值。对于每次新的请求,服务器都要给出一个不同的nonce值,所以客户端每次也必须产生一个新的请求摘要。

事实上,以上所描述的是摘要认证的一个轻量级实现版本。 RFC 2617 描述了增强的功能,包括一个用来阻止第三方操作在传输中的报文体的方法。

Security Considerations(安全思考)

你应该时刻记住即便是摘要认证,除了密码外的所有数据都是明文传输的,对于窃听者都是可窃听的。
没有一种方法可以使客户端去确认它正在访问的服务器就是它真实希望访问的那台。 没有一种适当的机制允许服务器来向客户端认证自己。
对于摘要认证安全细节的详细介绍可以参考 RFC 2617的第4部分。
不幸的是,一些浏览器目前缺乏对摘要认证的支持。

====================================翻译结束=======================================

basic authentication 实验截图(通过wireshark):

HTTP认证机制(翻译)的更多相关文章

  1. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  2. WPS 认证机制

    WPS 认证机制 WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)(有的叫做AOSS.有的叫做QSS,不过功能都一致.)是由Wi-Fi联盟组织实施的认证项目,主要致力于简化无线 ...

  3. 基于Token的WEB后台认证机制

    几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...

  4. HTTP中的摘要认证机制

    引子: 指定和服务器端交互的HTTP方法,URL地址,即其他请求信息: Method:表示http请求方法,一般使用"GET","POST". url:表示请求 ...

  5. USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制

    USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...

  6. 一个NB的安全认证机制

    这是一个NB的安全认证机制. 1.这是一个安全认证机制 2.可以防止黑客截获到客户端发送的请求消息,避免了黑客冒充客户端向服务器发送操作的请求. 原理与步骤: 1.客户端与服务器端都会放着一份验证用的 ...

  7. 【pac4j】OAuth 认证机制 入门篇

    1,pac4j是什么? pac4j是一个支持多种支持多种协议的身份认证的Java客户端. 2,pac4j的12种客户端认证机制:目前我只有用过第一和第八种. OAuth (1.0 & 2.0) ...

  8. web安全认证机制知多少

    如今web服务随处可见,成千上万的web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,本文将探讨五种常用的认证机制 ...

  9. (golang)HTTP基本认证机制及使用gocolly登录爬取

    内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...

  10. Android 怎样开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)

    前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net           ...

随机推荐

  1. twitter点赞动画详解

    今天在微博上看到@过气网红一丝 的一篇微博,codepen上贴出了twitter点赞那个动画效果的源码,地址 http://codepen.io/yisi/pen/LpXVJb .我看了下效果很好看, ...

  2. 如何解決 Homebrew Update 失敗?

    相信許多用 MAC 系統的程式設計師.工程師們都有用 Homebrew 這個超好用的 Open Source 套件管理程式吧? 如果沒有的話,你可以透過以下的指令安裝: ruby -e "$ ...

  3. c#摄像头编程实例 (转)

    c#摄像头编程实例 摄像头编程 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using  system;using  System.Runtime.Intero ...

  4. UIPopoverController使用

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. Ionic发布成android

    目前环境 1.ant的版本是1.9.4 2.jdk的版本是1.7 3.ionic安装版本是1.5.5 4.cordova版本是5.1.1 经测试,虽然ionic上面写的支持的最低版本是android- ...

  6. Model View Controller

    On the iPhone or iPod touch, a modal view controller takes over the entire screen. This is the defau ...

  7. Windows Server 2012重复数据删除技术体验

    在企业环境中,对磁盘空间的需求是惊人的.数据备份.文件服务器.软件镜像.虚拟磁盘等都需要占据大量的空间.对此,微软在Windows Server 2012中引入了重复数据删除技术.重复数据删除技术通过 ...

  8. 组合or继承

    面向对象设计有一个原则“优先使用对象组合,而不是继承”. 下面是两者优缺点的比较: 组 合 关 系 继 承 关 系 优点:不破坏封装,整体类与局部类之间松耦合,彼此相对独立 缺点:破坏封装,子类与父类 ...

  9. XML文档

    XML(Extensible Markuo Language)可标记扩展语言.它是一种以简单文本格式存储数据的方式,可以被任何计算机读取. XML文档里包含的元素都是可以自定义的. 1.XML文档声明 ...

  10. JSON 获取属性值的方法

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ...