INPUT元素:
IID_SecureWeb_I_SerialNumber:硬件序列号
IID_SecureWeb_I_SigninType:网站的登陆方式(value属性为1表示自动登录)
IID_SecureWeb_I_Random:临时生成的用于认证的随机数据
IID_SecureWeb_I_MD5Result:用于接收终端计算结果
按钮元素
IID_SecureWeb_B_Signin:登录按钮(用户认证)
认证流程:
1 【页面需要编码完成的流程】网页服务器端生成一串临时的用于认证的随机数据,并保存起来,然后赋值给IID_SecureWeb_I_Random。
2 USB KEY身份认证管理系统程序根据以下算法计算出一个字符串:
MD5Result_Client = MD5(SerialNumber + AdminPass + Random + SaltValue)
并将值赋予IID_SecureWeb_I_MD5Result。
3 【页面需要编码完成的流程】认证页面在SUBMIT后,在服务器端根据上传的硬件序列号找到UKey所代表的用户的记录,并读出记录里在发行时写入该UKey的种子认证数据,按照同样的算法计算:
MD5Result_Server = MD5(SerialNumber + AdminPass + Random + SaltValue)
并将此数据与终端上传的MD5Result_Client进行比较,如果一致,表明认证通过。
认证使用的算法为MD5,这个算法在不同的语言中,结果都是一致的。
请参考示例中login.asp创建流程的服务器端代码片段:
<%
if request.form("action")="sub" then
set rs=conn.execute("select * from psa_users where UserName='"&request.form("IID_SecureWeb_I_UserName")&"' and SerialNumber='"&request.form("IID_SecureWeb_I_SerialNumber")&"' ")
if not rs.eof then
MD5Result_s=md5(rs("SerialNumber")&rs("AdminPass")&Session("GetCode")&rs("SaltValue"))
else
MD5Result_s=Session("GetCode") '可以为任意非空值
end if
'rs.close
'set rs=nothing
if UCase(MD5Result_s)=Left(request.form("IID_SecureWeb_I_MD5Result"),32) then
response.Write("验证通过")
'此处可自行添加验证通过后其他页面动作。例如session赋值,页面转向等
else
response.Write "验证未通过"
response.Write "
S--"&MD5Result_s&"--"&UCase(MD5Result_s)
response.Write "
C--"&request.form("IID_SecureWeb_I_MD5Result")&"--"
response.Write "
S--"&rs("SerialNumber")&"--"&rs("AdminPass")&"--"&Session("GetCode")&"--"&rs("SaltValue")
response.Write "
C--"&request.form("IID_SecureWeb_I_SerialNumber")&"--"&request.form("IID_SecureWeb_I_Random")
end If
rs.close
set rs=nothing
End if
%>
在上述所有流程的交互过程中,USB KEY身份认证管理系统通过以下一个页面元素传递操作执行的状态和结果:
INPUT元素
IID_SecureWeb_I_Status:操作状态
0表示成功,其他数值表示错误代码。错误代码所对应的内容请参考开发手册。
可以通过定义该元素的onpropertychange属性,来等待USB KEY身份认证管理系统操作结果并触发相应的处理。例如创建发行用户的页面可以使用以下的代码:
页面有时候需要知道UKey的插入状态,这个可以通过元素IID_SecureWeb_I_SerialNumber的value属性来判断,如果为空字符串,则表明未插入,如果是一个长度为16字节的数字字符串,并且是合法的序列号,则表明已插入。例如:
设计好页面后,请注意需要在页面内添加一个id为
IID_SecureWeb_Support的元素,只有这样,USB KEY身份认证管理系统程序才会处理此页面。例如示例中body元素的id:
UKey 有一个PIN码,验证用户使用UKey的权限时候,避免丢失后被人滥用。PIN码由终端用户自行管理,可以取消,可以修改。如果连续错误输入导致锁定,将需要运维人员重新设置账户信息。运维人员在处理锁定的UKey时,只需要格式化,然后重新发行即可。