论坛首页 综合技术论坛

Web认证方法探视(1)

浏览 4631 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-23   最后修改:2009-02-23

什么是Web认证

 

简而言之,web认证就是一个确认对方身份的过程。Web认证最典型的方式是通过用户名和密码。

 

Web认证有多种方式

 

A. Http协议内建的认证方法

 

    1. Http Basic Authentication (Http基本认证)

 

        HTTP基本认证是最简单也是曾经使用过很长时间的一种认证方式。基本认证要求为每一个保护域(realm)提供一个用户名和密码进行认证。 

 

        流程简介:

 

        a. 客户端浏览器访问一个受http基本认证保护的资源。

 

        b. 服务器返回401(authentication required)状态,要求客户端提供用户名和密码进行认证。Response Header里面有一个属性WWW-Authenticate,它的值比如: Basic realm="Restlet tutorial"。

 

        c. 客户端弹出一个窗口,用于输入用户名和密码(基本上所有的浏览器都提供对基本认证的支持,它们都内建了一个用户名密码输入窗口)。

 

        d. 输入用户名密码并确认之后,客户端把%username%:%password%用Base64进行编码后通过Request Header: Authorization传送给服务器,所以可以看到Http基本认证是明文传输,安全风险很大。比如Authorization: Basic xxxxxxxxxx.

 

        e. 如果认证成功,则返回相应的资源。如果认证失败,则跳回b,重新进行认证。

 

        特点:

 

        *. Http是无状态的,即使来自同一个客户端,对同一个realm内资源的每一个访问还是会被要求进行认证。

 

        *. 客户端会缓存用户名和密码,并和认证域(authentication realm)一起保存。所以,如果对同一个域(realm)的其它资源进行访问,不需要你重新输入用户名和密码。

 

        *. 登录信息会和认证域以及服务器名一起存储,所以可以很好地和其他登录信息区分开来。

 

        *. 基本认证方式是不安全的,因为用户名密码以及内容都是以非加密的方式传输。

 

    2. Digest Authentication (摘要式身份认证)

 

        摘要式认证是一种基于challenge-response的认证模式。

 

        流程简介:

 

        a. 客户端发起一个请求(没有认证信息)。

 

        b. Web服务器返回一个带有WWW-Authenticate头的response(401),请求提供认证。

 

        c. 客户端返回用户名和密码的摘要信息(比如说MD5加密),而不是明文。

 

        d. 通过认证,则返回相应的内容。否则,继续b。

 

        特点:

 

        *. 摘要认证主要是为了解决基本认证中最大的漏洞,即用明文传输用户名和密码的问题。

 

        *. 挑战模式:每次返回401响应的时候,都会返回一个nonce(number used only once)。或者,为了安全起见,还可能会使用一次性nounce(每个request都得到一个不同的nounce)等其它方法来加强安全性。

 

        *. Checksum(默认是MD5 checksum)是username, password, nonce值, HTTP方法, 和被请求的URI的checksum。

 

        *. 安全隐患:虽然密码并非明文传输,但黑客还是可以利用digest值来访问网站。并且,它对内容并不加密。

 

B. Form-based

 

    基于Form的认证方式是高度可定制,也应该是目前用地最多的一种认证方式。

 

    流程简介:

 

    1. 客户端通过一个form,把用户名和密码post给服务端。

 

    2. 服务端通过一些逻辑来判断认证是否有效。

 

    3. 如果认证成功,服务器返回一个cookie(一个能唯一确认客户端的cookie,比如sessionId),用于客户端接下来的访问。如果认证失败,会提示用户进行重新输入用户名密码再次认证。

 

    特点:

 

    *. 高度可定制:可以根据自己的需要来实现认证逻辑。

 

    *. 服务器端要有一个保存客户端信息的地方,比如session。

 

    *. 客户端要有一个cookie来表明自己的身份,一般是username和一个cookie值(比如sessionId)的组合。

 

    *. 客户端cookie的生命周期和安全性息息相关。比如现在很多站点都支持“remember me”,其实就是在服务器端remember session并在客户端remember cookie。有些站点为了更好的安全性,用这种方式登录时,如果要执行一些重要的操作比如改密码,会要求客户用用户名和密码的方式重新登录。

 

C. 证书认证

 

    证书认证方式比之其他方式是最安全的认证方式。

 

    对于数字证书的作用,我在这篇文章 里面做了详细介绍。

 

D. 微软提供的认证方式

 

     这几种认证方式都是微软提供的,不做太多介绍。

 

     1. NTLM,IE only。

 

     2. Microsoft Passport(Single Signon).

     

好了,这篇文章就简单介绍一下各种认证方式吧。下篇文章,主要讨论几种认证方式在各种服务器上的实现方式。

   发表时间:2009-07-29  
我写了一篇文章关于WSSE的认证方式,感觉和摘要式的比较像,但又不完全一样。不知道他们俩是不是出自同门?
0 请登录后投票
   发表时间:2009-07-29  
忘记把link附上了.
http://grandboy.iteye.com/blog/434867
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics