最近根据客户的需要,对《威博文件管理系统》进行定制,即使用身份认证狗,在B/S结构的系统中的进行身份认证。
主要要求如下:
1、登陆系统时,把身份认证狗插在USB上,登陆时,使用双重身份认证,即验证用户名和密码,又验证身份狗号。
2、登陆进系统后,在使用系统的过程中用户不得拔下加密狗,一旦拔下,系统将摧毁当前会话,强制退出系统。
下面就是我的具体实现概述
首先构造一个登陆页面,也就是登陆视图(按照JSF的术语)
其中我们要注意ActiveX控件代码段,这段代码为加密狗,自身要求的客户端ActiveX控件,主要用来进行客户端相关计算,该控件用来和身份认证狗(加密狗)进行通信。
表单数据携带代码段,
客户端,当点击提交按钮时,执行相应的javascript代码,设值相关JSF表单各字段的值,代码段
客户端验证原理是,当点击客户端提交按钮时,身份认证狗利用客户端ActiveX控件,生成客户端MD5摘要,获取加密狗硬件ID,并由javascript代码,把相应的值置入JSF表单的隐藏域中,随其它信息发送到服务器端。
服务器端收到相关信息后,进行服务器端摘要计算与验证,具体代码如下:
服务器端MD5摘要计算
服务器端身份认证过程是,收到客户端发来的MD5摘要,用户名、密码、身份认证狗硬件ID后,获取事先存储在数据表中的对应信息,在服务器端计算MD5摘要,如果能够匹配,则通过身份认证,用户可以正常使用系统。
登陆进,系统后,要求用户不得拔下加密狗,一旦拔下,系统将摧毁当前会话,强制退出系统。这个就是在每个JSF视图文件的插入一个include文件,当视图渲染到客户端浏览器时,都检测一下,当前客户端中,是否插有身份认证狗,如果没有,则转到错误视图,强制销毁会话,具体代码如下: