原文链接:http://www.ajaxpatterns.org/Direct_Login
这个模式主要实现了Ajax中,进行流畅的用户安全登陆的过程。
该模式的流程主要如下:
- 1. 用户访问Web站点
- 2. 服务器处理初始页面.
- 2a. 服务器生成一个或多个一次性使用的种子,并且存储他(们). 2b. 服务器输出页面,包括登陆Form,并且将一次性的种子存储在页面的某个位置(比如Javascript的一个变量中).
- 3. 用户输入用户名与密码.
- 4. 浏览器处理.
- 4a. 浏览器使用服务器端数据库中加密用户密码的算法加密浏览器中用户输入的密码.
- 4b. 浏览器将上一步加密的值与一次性的种子进行合并,生成一个经过二次加密的值.
- 4c. 浏览器上传用户名,二次加密的密码值,和服务器生成的一次性种子(为了方便起见)
- 5a. 服务器确认种子是否有效
- 5b. 服务器提取出数据库中加密过的用户密码,并且和一次性种子进行合并,生成经过二次加密的值.
- 5c. 服务器比较两个经过二次加密的用户密码.如果成功,则用户登录成功.
在保证没有Hacker监听Browser上传数据的情况下,这种登陆方式是安全的。即使被侦听到了我们上传的数据,那一次性的Seed也可以发挥作用,保证我们的安全性。
主要是Seed的生成过程,我认为可以采取两种方式:
1. 加密产生Seed,使用服务器的一些特定信息,使用一定算法产生Seed,保证浏览器提交的Seed的正确性。
2. 存储产生的Seed,保证浏览器提交的Seed是服务器生成的,并且该Seed存储在服务器的内存中,使用一次后过期。
![]()
![]()

