浏览 1434 次
锁定老帖子 主题:普通 http 下可靠的网路认证方式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-01
最后修改:2009-04-09
服务器:对客户端的每次请求,每一次都生成一个随机字符串(变码),该字符串传递到客户端,同时也存储到 Session 中,用于客户端下一次的身份认证。 客户端:在每次请求发出前,用上次接收的变码和基码计算:md5(基码 + 变码)。请求发出时,将该值一同发送到服务器进行身份的确认。 原理简图: (图注:在一次会话中,基码的传递是一次性的,随后即脱离 https 进入普通的 http 通讯) 功能: 可以完全地保证普通 http 网路中会话的身份可靠性 ——即使会话 ID 被劫持盗用也是安全的。 这里,会话 ID 不是用于身份的确认,而只是用于检索会话数据的索引,如果认证不通过,便不会使用该索引检索进一步的数据。 其次,因为基码是不会在客户端和目标网站间传递的,所以,它也可以被用作数据加/解密的密钥。这样,在普通 http 明文传输的情况下,不但用户身份可唯一安全的确定,并且其内容数据也可得到安全的加密传输。 前提: 目标网站可以与 https 认证系统进行通讯以创建和取得基码。 方法可以有多种,如: A、 由目标网站创建基码,发起 https 请求传递基码(和一个索引码)到认证服务器;用户从 https 认证服务器登录,成功后按索引码取得基码。这种方法具有完全的安全性。 B、 目标网站可以访问 https 认证系统的后台数据库取得基码。这时是由认证服务器创建基码(和一个索引码),客户端通过索引码让目标网站从认证系统的后台数据库中获得基码。 C、 可以通过文件系统存储基码达到目的。此时也由认证服务器创建基码(和一个索引名),同时向目标网站请求写入基码,文件名为索引名,文件内容为基码。客户端在 https 下获取基码存储到本地,同时以此索引码确认当前会话中服务器使用的基码。 说明: 如果 https 认证服务器是完全独立的,即目标网站无法或不设置和认证服务器后台数据库通讯的权力,则可采用 A、C 两种方式。这两种方式中后者是不完全安全的,因为认证服务器和目标网站的基码传递是明码。 这种 https 认证服务器独立的方式,使得可以创建通用的认证服务器。 如果 https 认证服务器和目标网站共享用户数据库,则可采用 B 的方式,其安全性决定于 Web 服务器和数据库间的连接。 < 浏览器中实现的思路 > ================== (对应上述获取基码的 A 方式) 开创 3 个类型的数据存储,处于安全性考虑,存储区仅由浏览器内部使用,不对外开放。 存储区可以限定为只存储字符串。 1、 特定于窗口的「暂存区」,需要引用窗口才能操作该数据,功能取代在 location hash 存储跨域交换数据(指 JS 实现版本)。 该区为只写,由服务器端的回应头设置,比如: WWW-Authenticate: third2auth # 声明认证类型(乱取的名字哦 ^o^) Pragma: code-temp name string # 对命名窗口 name 设置其暂存区数据为 string。 2、 与特定域相关的「基码区」。该区数据只能由浏览器取暂存区数据设置。它由回应头发出一个请求来实施。比如: WWW-Authenticate: third2auth Pragma: code-base name # 请求 winname 窗口暂存区的数据为自身域的基码。 3、 与特定域相关的「变码区」。该区数据由回应头携带的数据设置,比如: WWW-Authenticate: third2auth Pragma: code-case string # 设置变码区数据为 string。 认证前过程: 1、 用户请求目标网站登录页面,登录页面创建基码,并与 https 认证服务器通讯传递基码和一个索引码A。 如果与认证服务器的通讯成功完成,携带索引码A嵌入(或跳转到)认证服务器的登录窗口。 用户在 https 登录窗口填写登录信息进行登录认证。 图示: 2、 用户通过 https 认证服务器登录,成功后服务器根据索引码获取基码,同时生成用户身份 ID 的检索码B。 认证服务器返回一个设置基码到暂存区的请求(code-temp),同时携带检索码B嵌入(或跳转到)原始目标网站的认证确认页面。 图示: 3、 目标网站的认证确认页面根据检索码获取用户身份 ID(目标网站的授权是根据用户的身份 ID 进行的),同时返回一个包含了提取基码的头信息(code-base),于是将基码存储在了浏览器的本域基码区中。 图示: 至此,通过 https 的预认证完成,以后的动态认证和通讯就完全脱离对 https 的依赖。 =============================================================================== ※ 授权:原创文章,欢迎转载,但请注明出处 @ Liner@iteye.com 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |