4月阅读周·HTTP权威指南:基本认证机制之基本认证篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
基本认证机制
有数百万的人在用Web进行私人事务处理,访问私有的数据。通过Web可以很方便地访问这些信息,但仅仅是方便访问还是不够的。我们要保证只有特定的人能看到我们的敏感信息并且能够执行我们的特权事务。并不是所有的信息都能够公开发布的。未授权用户无法查看我们的在线旅游档案,也不能在未经许可的情况下向Web站点发布文档,这会让我们感觉舒服一些。
服务器需要通过某种方式来了解用户身份。一旦服务器知道了用户身份,就可以判定用户可以访问的事务和资源了。认证就意味着要证明你是谁。通常是通过提供用户名和密码来进行认证的。HTTP为认证提供了一种原生工具。尽管我们可以在HTTP的认证形式和cookie基础之上“运行自己的”认证工具,但在很多情况下,HTTP的原生认证功能就可以很好地满足要求。
基本认证
基本认证是最流行的HTTP认证协议。几乎每个主要的客户端和服务器都实现了基本认证机制。基本认证最初是在HTTP/1.0规范中提出的,但此后被移到了RFC 2617中,它详细介绍了HTTP的认证机制。
基本认证实例
下面是一个详细的基本认证实例。
- 用户请求了私人家庭相片/family/jeff.jpg。
- 服务器回送一条401 Authorization Required,对私人家庭相片进行密码质询,同时回送的还有WWW-Authenticate首部。这个首部请求对Family域进行基本认证。
- 浏览器收到了401质询,弹出对话框,询问Family域的用户名和密码。用户输入用户名和密码时,浏览器会用一个冒号将其连接起来,编码成“经过扰码的”Base-64表示形式(下节介绍),然后将其放在Authorization首部中回送。
- 服务器对用户名和密码进行解码,验证它们的正确性,然后用一条HTTP 200 OK报文返回所请求的报文。
Base-64 用户名/密码编码
HTTP基本认证将(由冒号分隔的)用户名和密码打包在一起,并用Base-64编码方式对其进行编码。如果不知道Base-64编码是什么意思,也不用担心。你并不需要对它有太多的了解,如果对此感兴趣,可以在附录E中读到所有与之有关的内容。简单来说,Base-64编码会将一个8位字节序列划分为一些6位的块。用每个6位的块在一个特殊的由64个字符组成的字母表中选择一个字符,这个字母表中包含了大部分字母和数字。
以下是使用Base-64编码的基本认证实例。在这个例子中,用户名为brian-totty,密码为Ow!。浏览器用冒号将用户名和密码连接起来,生成一个打包字符串brian-totty:Ow!。然后对这个字符串进行Base-64编码,变成一串乱码:YnJpYW4tdG90dHk6T3ch。
Base-64编码可以接受二进制字符串、文本、国际字符表示的数据(在某些系统中会引发一些问题),将其暂时转换成一个易移植的字母表以便传输。然后,在远端就可以解码出原始字符串,而无需担心传输错误了。
有些用户名和密码中会包含国际字符或其他在HTTP首部中非法的字符(比如引号、冒号和回车换行符),对这些用户名和密码来说,Base-64编码是非常有用的。而且,Base-64编码扰乱了用户名和密码,这样也可以防止管理员在管理服务器和网络时,不小心看到用户名和密码。
代理认证
中间的代理服务器也可以实现认证功能。有些组织会在用户访问服务器、LAN或无线网络之前,用代理服务器对其进行认证。可以在代理服务器上对访问策略进行集中管理,因此,通过代理服务器提供对某组织内部资源的统一访问控制是一种很便捷的方式。这个过程的第一步就是通过代理认证(proxy authentication)来识别身份。
代理认证的步骤与Web服务器身份验证的步骤相同。但首部和状态码都有所不同。
总结
在基本认证中,Web服务器可以拒绝一个事务,质询客户端,请用户提供有效的用户名和密码。服务器会返回401状态码,而不是200状态码来初始化认证质询,并用WWW-Authenticate响应首部指定要访问的安全域。浏览器收到质询时,会打开一个对话框,请求用户输入这个域的用户名和密码。然后将用户名和密码稍加扰码,再用Authorization请求首部回送给服务器。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)