概述:
NC系统是应用于高端企业集团ERP应用的产品,其地位决定了其系统安全性的重要,包括登录身份的认证和各种数据的安全。NC系统对数据的安全性的处理不在本文描述,本文主要阐述系统登录的身份认证的安全性及认证方式的实现。
NC系统默认的身份认证方式是基于静态密码的认证方式。目前,在身份认证领域,也有许多厂家能提供更为安全可靠的认证方式,如CA认证,动态密码认证。为了提高NC系统本身在登录认证方面的安全性,NC系统提供了一套用于集成第三方认证方式的接口,能够方便地将更为安全的身份认证方式集成到NC系统中,进而加强NC系统在登录时身份认证的安全性。
NC系统身份认证实现说明
NC系统的身份认证集成接口主要包含:
● 后台的认证接口:nc.bs.sm.identityverify.IAMode
● 前台的预处理接口:nc.bs.sm.identityverify.IloginPretreatment
● 前台的认证结果消息接口:nc.bs.sm.identityverify.IloginResultMessage
一般实现某种身份认证方式即实现上述接口。
一.后台的认证接口是实现一个身份认证方式必须要实现的一个接口,不过在实际的代码中,一般都是继承nc.bs.sm.identityverify.AbstractIAMode抽象类,它实现了nc.bs.sm.identityverify.IAMode接口。程序员需要实现verify方法,在该方法中进行用户的身份认证。 int verify(nc.vo.sm.login.LoginSessBean lsb, nc.vo.sm.UserVO userVO);
参数:
LoginSessBean lsb 主要存储登录用户的一些信息,如用户编码,用户密码,或其他一些信息(可以有LoginSessBean.put()方法和()方法存取)。
UserVO userVO 利用lsb中的公司信息和用户编码信息在数据库中查到的nc用户对象,
包含了身份认证系统nc用户的信息。
返回值 int 表示身份认证的结果,如果身份认证成功,请返回nc.vo.sm.login.ILoginResult.LOGIN_LEGALIDENTITY。如果不合法,返回其他自定义的int值,但是自定义的返回值必须大于200 (小于200的返回值分配给系统自己使用)
nc.bs.sm.identityverify.AbstractIAMode类有一个方法是Object getParameter(String key),它的是返回定义在配置文件中的参数,关于配置文件,后面将有描述。
二.前台的预处理接口是在前台运行的,它提供了在调用后台认证功能之前进行一些预处理操作的机会。例如一般在实现某种CA认证方式时,需要从usbkey中读取用户信息,以及对挑战码进行签名的操作等等,并将这些挑战码传输到后台,供身份认证使用,此时即可实现该接口。该接口定义了一个方法
void pretreatment(LoginSessBean lsb) throws Exception,在该方法中进行上述的操作,一些需要传输到后台的信息利用lsb传递,例如用户编码,需要利用lsb.setUserCode方式设置。对于其他用于外系统进行认证的数据,如挑战码,应该使用lsb.put方法设置到lsb中,供后台
调用
void pretreatment(nc.vo.sm.login.LoginSessBean lsb) throws Exception
参数:LoginSessBean lsb 这里的lsb主要用来存储一些后台认证需要的数据,可以使用lsb的相关方法进行设置,这个lsb对象将传递给后台的认证方法verify(nc.vo.sm.login.LoginSessBean lsb, nc.vo.sm.UserVO userVO);中的参数lsb。
异常:出现一些需要终止操作的异常,可以抛出
如果认证方式中不需要前台的预处理过程,可以不实现该接口。
三.前台的认证结果消息接口nc.bs.sm.identityverify.IloginResultMessage的作用主要在于,在我们的认证方法中返回的是int型数据,不能直接反馈给用户,故利用此接口进行认证结果的映射,将int型的认证结果翻译为用户能够理解的文字信息,这些文字信息将提示用户认证失败的原因。该接口方法定义如下:
String getResultMessage(int intResult);
参数: int intResult 该值由后台认证接口方法返回,
返回值 String 返回给用户的对应intResult的提示文字
四.对于代码开发来说,实现上面的接口后,就完成了开发工作。紧接着就是需要进行一些配置工作,即可在NC系统中使用新的身份认证方式。
对于nc3x的版本
配置文件为./ierp/l,它的一般格式为:(例子)
<?xml version="1.0" encoding='gb2312'?>
<root ClassType="nc.vo.sm.identityverify.IAConfigFileVO" docType="(Java lang)Middleware depoly parameter">
<Configs>
<IdentityVerifyClassName>nc.bs.uap.ca.CAMode</IdentityVerifyClassName>
<IdentityVerifyName>CA认证</IdentityVerifyName>
<IdentityVerifyCode>ncca</IdentityVerifyCode>
<Parameters>
<Key>userIDMode</Key>
<Value>usercode</Value>
</Parameters>
<Used>true</Used> <LoginPretreatmentClassName>nc.ui.uap.ca.CALoginPretreatment</LoginPretreatmentClassName>
<LoginResultClassName>nc.ui.uap.ca.CALoginResult</LoginResultClassName>
</Configs>
</root>
对于nc5x的版本
配置文件为./ierp/l,它的一般格式为:(例子)
<?xml version="1.0" encoding='gb2312'?>
<root ClassType="nc.vo.sm.identityverify.IAConfigFileVO" docType="(Java lang)Middleware depoly parameter">
<SysDefIACode>staticpwd</SysDefIACode>
<Configs>
<IdentityVerifyClassName>nc.bs.uap.ca.CAMode</IdentityVerifyClassName>
<IdentityVerifyName>CA认证</IdentityVerifyName>
<IdentityVerifyCode>ncca</IdentityVerifyCode>
<Parameters>
<Key>userIDMode</Key>
<Value>usercode</Value>
</Parameters>
<Enable>true</Enable>
<LoginPretreatmentClassName>nc.ui.uap.ca.CALoginPretreatment</LoginPretreatmentClassName>
<LoginResultClassName>nc.ui.uap.ca.CALoginResult</LoginResultClassName>
</Configs>
</root>
对于<Parameters>,如果程序中不需要额外的参数配置,可以不需要配置
对于<LoginPretreatmentClassName>,如果认证方式中不需要前台的预处理过程,也可以不配置该项
对于<LoginResultClassName>,如果没有额外的信息返回,也可以不配置该项
附录:
NC系统登录身份认证相关包及类
nc.bs.sm.identityverify
|——AbstractIAMode #身份认证方式抽象类,一般实现某种认证方式都要实现该类
|——IAConfigFileTool #读写身份认证配置文件的工具类
|——IAConfSetupDlg #和IASetupFrame类一起配置身份认证配置文件
|——IAMode #身份认证方式接口类,由AbstractIAMode实现
|——IAModeFactory #在系统运行时根据身份认证配置文件构造一个认证方式对象
|——IASetupFrame #配置身份认证配置文件的工具
|——IASetupPanel #配置身份认证配置文件
|——StaticPasswordIAMode #系统默认的静态密码认证方式类,它实现了AbstractIAMode
nc.ui.sm.identityverify
|——DefaultLoginPretreatment #默认的登录预处理类
|——IloginPretreatment #登录预处理接口类。凡在登录前需要做的工作可实现该类来完成
|——>IloginResultMessage #登录返回信息类。根据返回的int值得到string值。
nc.vo.sm.identityverify
|——IAConfigFileVO #对应于身份认证方式配置文件的vo类
|——IAConfVO #对应于一种身份认证方式的vo类
|——IAContext #身份认证上下文类,可以通过该类获取身份认证方式需要的参数
|——IAParameterVO #对应于身份认证方式的参数vo类
nc.vo.sm.login.LoginSessBean的相关方法:
方法名称 | 方法描述 |
get(String) | 获取通过put方法设置的属性值 |
put(String, Object) | 设置key-value属性值对 |
getPk_crop() | 获取公司主键值 |
setPk_corp(String) | 设置公司主键值 |
getUserCode() | 获取用户编码 |
setUserCode(String) | 设置用户编码 |
getPassword() | 获取用户密码 |
setPassword(String) | 设置用户密码 |
| |