http中的认证

来源:互联网 发布:阿里云服务器内存不足 编辑:程序博客网 时间:2024/06/05 01:09
1.HTTP基本认证:
HTTP中的基本认证是一种用来允许Web浏览器,或其他客户端程序在请求时提供以用户名和口令形式的凭证。

如用户输入口令和密码,在网络以明文传递肯定不安全。
所以:
在发送之前,用户名追加一个冒号然后串接上口令。得出的结果字符串再用Base64算法编码。例如,用户名是Aladdin,口令是open sesame,拼接后的结果是Aladdin:open sesame,然后再用Base64编码,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。 Base64编码的字符串发送出去,并由接收者解码,得到一个由冒号分隔的用户名和口令的字符串。

优点:
简单易操作,所以很少用于公共网络,多用于测试。

缺点:
虽然基本认证非常容易实现,但该方案建立在以下的假设的基础上,即:客户端和服务器主机之间的连接是安全可信的。特别是,如果没有使用SSL/TLS这样的传输层安全的协议,那么以明文传输的密钥和口令很容易被拦截。该方案同样没有对服务器返回的信息提供保护。

例子:

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

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

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

2.http的摘要认证:


1.概述:
  摘要认证(Digest authentication)用来提供比基础认证更高级别的安全。在RFC2617[1]中有关于它的描述,摘要认证是一种基于挑战-应答模式的认证模型。这是一种常用的技术,用于证明某人知道某个秘密,而不要求他以容易被窃听的明文形式发送该秘密。
2.原理:
  摘要认证与基础认证的工作原理很相似,用户先发出一个没有认证证书的请求,Web服务器回复一个带有WWW-Authenticate头的响应,指明访问所请求的资源需要证书。但是和基础认证发送以Base 64编码的用户名和密码不同,在摘要认证中服务器让客户选一个随机数(称作”nonce“),然后浏览器使用一个单向的加密函数生成一个消息摘要(message digest),该摘要是关于用户名、密码、给定的nonce值、HTTP方法,以及所请求的URL。消息摘要函数也被成为散列算法,是一种在一个方向上很容易计算,反方向却不可行的加密算法。与基础认证对比,解码基础认证中的Base 64是很容易办到的。在服务器口令中,可以指定任意的散列算法。MD5散列函数作为默认算法。


                            -----来自 维基百科