分享

USB KEY身份认证管理系统及网站访问控制方案(三)

 WindySky 2017-11-23

搜索标签:Usb身份认证,Ukey身份认证,Usb Key身份认证。

2.3.2用户认证模块

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 "<br>S--"&MD5Result_s&"--"&UCase(MD5Result_s)

             response.Write "<br>C--"&request.form("IID_SecureWeb_I_MD5Result")&"--"

             response.Write "<br>S--"&rs("SerialNumber")&"--"&rs("AdminPass")&"--"&Session("GetCode")&"--"&rs("SaltValue")

             response.Write "<br>C--"&request.form("IID_SecureWeb_I_SerialNumber")&"--"&request.form("IID_SecureWeb_I_Random")

      end If

      rs.close

      set rs=nothing

End if

%>

2.3.3UKEY操作状态

在上述所有流程的交互过程中,USB KEY身份认证管理系统通过以下一个页面元素传递操作执行的状态和结果:

INPUT元素

IID_SecureWeb_I_Status:操作状态

0表示成功,其他数值表示错误代码。错误代码所对应的内容请参考开发手册。

可以通过定义该元素的onpropertychange属性,来等待USB KEY身份认证管理系统操作结果并触发相应的处理。例如创建发行用户的页面可以使用以下的代码:

<input id="IID_SecureWeb_I_Status" name="IID_SecureWeb_I_Status" size="3" maxlength="250" onpropertychange="createok();" type="hidden" value="">

<SCRIPT LANGUAGE="JavaScript">

<!--

//操作结果,根据 IID_SecureWeb_I_Status 的显示相应提示。其他状态代码请参阅开发手册

function createok()

{

      var createresult=document.getElementById('IID_SecureWeb_I_Status').value;

      switch (createresult)

      {

             case '0':

                    document.getElementById('prompt').innerHTML='创建成功,正写入数据库...';

                    //PSA创建成功,提交表单创建数据库相应内容

                    document.form1.action.value='dbcreate';

                    document.form1.submit();

                    break;

             case '301':

                    document.getElementById('prompt').innerHTML='接口不存在,PSA需要升级。 错误代码:301';

                    break;

             case '302':

                    document.getElementById('prompt').innerHTML='应用名称不存在(未创建)。 错误代码:302';

                    break;

             case '303':

                    document.getElementById('prompt').innerHTML='应用名称与管理密码不匹配。 错误代码:303';

                    break;

             case '304':

                    document.getElementById('prompt').innerHTML='页面代码不符合接口规范。 错误代码:304';

                    break;

             case '305':

                    document.getElementById('prompt').innerHTML='应用名称已经存在。 错误代码:305';

                    break;

             case '306':

                    document.getElementById('prompt').innerHTML='输入元素值不能为空。 错误代码:306';

                    break;

             case '307':

                    document.getElementById('prompt').innerHTML='URL不符合格式要求。 错误代码:307';

                    break;  

             case '308':

                    document.getElementById('prompt').innerHTML='非预设登陆网站。 错误代码:308';

                    break;

             case '309':

                    document.getElementById('prompt').innerHTML='PSA内部错误。 错误代码:309';

                    break;                

      }

}

//-->

</SCRIPT>

2.3.4UKey硬件的状态

页面有时候需要知道UKey的插入状态,这个可以通过元素IID_SecureWeb_I_SerialNumbervalue属性来判断,如果为空字符串,则表明未插入,如果是一个长度为16字节的数字字符串,并且是合法的序列号,则表明已插入。例如:

<input id="IID_SecureWeb_I_SerialNumber" name="IID_SecureWeb_I_SerialNumber" size="20" maxlength="32" onpropertychange="psaok();" type="hidden" value="">

<SCRIPT LANGUAGE="JavaScript">

<!--

//监测psa插入

function psaok()

{

      if (document.getElementById('IID_SecureWeb_I_SerialNumber').value!='')

      {

             document.getElementById('IID_SecureWeb_B_Create').disabled='';

             document.getElementById('prompt').innerHTML="PSA已插入";

      }

      if  (document.getElementById('IID_SecureWeb_I_SerialNumber').value=='')

      {

             document.getElementById('IID_SecureWeb_B_Create').disabled='disabled';

             document.getElementById('prompt').innerHTML="请插入PSA";

      }

}

//-->

</SCRIPT>

常见问题

3.1 页面基本元素

设计好页面后,请注意需要在页面内添加一个id

IID_SecureWeb_Support的元素,只有这样,USB KEY身份认证管理系统程序才会处理此页面。例如示例中body元素的id<body id="IID_SecureWeb_Support">

3.2 PIN码的问题

UKey 有一个PIN码,验证用户使用UKey的权限时候,避免丢失后被人滥用。PIN码由终端用户自行管理,可以取消,可以修改。如果连续错误输入导致锁定,将需要运维人员重新设置账户信息。运维人员在处理锁定的UKey时,只需要格式化,然后重新发行即可。

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多