HTTP Authorization 之 Basic Auth

HTTP 协议提供了一系列认证功能,这些功能只要在 HTTP Web Server 上配置即可,比较便捷。

Basic Auth

一、简介

在HTTP中,基本认证(Basic access authentication)是一种用来允许网页浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
优点
  基本认证的一个优点是基本上所有流行的网页浏览器都支持基本认证。基本认证很少在可公开访问的互联网网站上使用,有时候会在小的私有系统中使用(如路由器网页管理接口)。后来的机制HTTP摘要认证是为替代基本认证而开发的,允许密钥以相对安全的方式在不安全的通道上传输。
  程序员和系统管理员有时会在可信网络环境中使用基本认证,使用Telnet或其他明文网络协议工具手动地测试Web服务器。这是一个麻烦的过程,但是网络上传输的内容是人可读的,以便进行诊断。

缺点
  虽然基本认证非常容易实现,但该方案创建在以下的假设的基础上,即:客户端和服务器主机之间的连接是安全可信的。特别是,如果没有使用SSL/TLS这样的传输层安全的协议,那么以明文传输的密钥和口令很容易被拦截。该方案也同样没有对服务器返回的信息提供保护。
  现存的浏览器保存认证信息直到标签页或浏览器被关闭,或者用户清除历史记录。HTTP没有为服务器提供一种方法指示客户端丢弃这些被缓存的密钥。这意味着服务器端在用户不关闭浏览器的情况下,并没有一种有效的方法来让用户注销。

二、访问形式

1、使用浏览器

在使用浏览器访问设置了 HTTP Basic Auth 的服务器时,会弹出对话框,输入用户名和密码即可。

2、使用 HTTP Client 工具
http://user:passwd@httpbin.org/basic-auth/user/passwd

三、原理

这一个典型的HTTP客户端和HTTP服务器的对话,服务器安装在同一台计算机上(localhost),包含以下步骤:

  • 客户端请求一个需要身份认证的页面,但是没有提供用户名和口令。这通常是用户在地址栏输入一个URL,或是打开了一个指向该页面的链接。
  • 服务端响应一个401应答码,并提供一个认证域。
  • 接到应答后,客户端显示该认证域(通常是所访问的计算机或系统的描述)给用户并提示输入用户名和口令。此时用户可以选择确定或取消。
  • 用户输入了用户名和口令后,客户端软件会在原先的请求上增加认证消息头,然后重新发送再次尝试。
    其名称与值的形式是这样的:
Authorization: Basic base64encode(username+":"+password)
  • 在本例中,服务器接受了该认证屏幕并返回了页面。如果用户凭据非法或无效,服务器可能再次返回401应答码,客户端可以再次提示用户输入口令。

注意:客户端有可能不需要用户交互,在第一次请求中就发送认证消息头。

客户端请求(没有认证信息):

GET /private/index.html HTTP/1.0
Host: localhost

(跟随一个换行,以回车(CR)加换行(LF)的形式)

服务端应答:

HTTP/1.0 401 Authorization Required
Server: HTTPd/1.0
Date: Sat, 27 Nov 2004 10:18:15 GMT
WWW-Authenticate: Basic realm="Secure Area"
Content-Type: text/html
Content-Length: 311

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
  <HEAD>
    <TITLE>Error</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
  </HEAD>
  <BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>

说明:Response 中的 WWW-Authenticate 字段会指示浏览器弹出询问用户名密码的提示框。

WWW-Authenticate: Basic realm="Secure Area"

客户端的请求(用户名:Aladdin,口令:open sesame):

GET /private/index.html HTTP/1.0
Host: localhost
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

说明:base64encode(Aladdin:open sesame)=QWxhZGRpbjpvcGVuIHNlc2FtZQ==

四、参考资料:

维基百科——HTTP基本认证

(完)

推荐阅读更多精彩内容

  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 4,285评论 3 83
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 118,127评论 14 132
  • 第一,占领小市场。 每个初创公司刚开始都很小,每个垄断企业都在自己的市场内占主导地位,因此,每个初创公司都应该在非...
    仲兄阅读 191评论 0 0
  • 近期朋友圈刷爆了这张图!很多文化课老师告诉你,现在学习紧张了不要报那种兴趣班了,好好搞学习。等着高三看着成绩不太理...
    张介公教育阅读 95评论 0 0
  • 她说我太小 她说我太可爱 她说我不懂爱 她说她走了 她说 她说 我醉了
    玩玩玩哇阅读 52评论 0 0