OTP在实际项目中的集成
来源:互联网 发布:中世纪攻城 知乎 编辑:程序博客网 时间:2024/06/05 10:25
提起动态令牌,大家都会想到认证服务器,而这个认证服务器又怎么应用到实际的应用系统中呢?在这里做一个分析和说明,帮助广大用户能够更好的使用OTP动态令牌这种身份认证产品。
从前面OTP原理部分中可以看出,服务器端是在一个范围内计算出多个OTP,然后检验客户端硬件产生的OTP口令是否在这个范围内。那么服务器端只要能够完成这样的验证就可以了。实际上所有厂家的OTP认证服务器都是建立在这个认证基础上的。即认证接口是服务器的本质和核心。
OTP厂商提供的服务器软件无非就是在这个认证接口上增加其他的功能,如:数据库表定义、令牌管理工具、Radius支持、各种认证代理插件等,但最终都会归到这个认证接口完成最终的认证。另外,在某些情况下,OTP厂商也会将认证服务器软件安装到硬件服务器上,将硬件设备一同销售给客户。
从上面的分析可以看出,可以有3种模式将OTP系统集成到应用系统中,即:核心接口开发模式、服务器接口开发模式和服务器代理模式。下面就来说明一下它们的特点。
核心接口开发模式
该模式是最为灵活,集成最为方便简单,与应用最为紧密结合的模式。由于与关联少,也是目前大型项目中常采用的模式(如:中国银行,同花顺证券系统,上海期货交易所等都是采用接口形式的开发)。该模式由OTP厂商提供认证和同步两个API接口供系统集成调用。接口不与数据库连接,应用系统使用系统中原有的数据库连接方式,将密钥与调整值从数据取出带入到接口中进行认证,认证成功后,将新的调整值写回到数据库中。数据库中用户存储令牌信息的数据表可以根据应用系统实际情况进行设计,方便灵活。
集成过程如下:
(1)在数据库中增加一张用于存储OTP动态令牌信息的数据表。里面至少存储以下字段:“令牌号”(背面条形码)、“密钥”(authkey)、“成功值”(currsucc)、“漂移值”(currdft)。其中令牌号和密钥都可以用字符串形式,成功值和漂移值接口中要用到uint64(BigInteger)和int类型。
(2)在系统的用户表中增加一个存“令牌号”的字段,存储与用户绑定的令牌号。
用户在登录时,输入用户名和OTP传给服务器端。服务器通过用户名到用户表中得到“令牌号”,再通过这个“令牌号”到令牌表中得到“密钥”,“成功值”和“漂移值”,带入到接口中进行认证或同步,认证或同步成功后将返回的值写回数据库中保存。认证或同步失败时,不要将这两个值写回数据库。
服务器接口开发模式
这种模式下,需要安装OTP厂商提供的服务器软件,安装OTP服务器软件的机器就是OTP认证服务器。可以在服务器端调用服务器接口,或者在web服务器机器上调用代理接口将OTP集成到应用系统中。
服务器接口是指应用系统直接调用这个接口,接口直接调用数据库取得需要的数据,完成认证,如下所示:
OTP传给 读/写认证信息
客户端―――――>应用系统后台认证模块―>调用服务器接口 <―――――――>数据库
代理接口是指通过认证代理,认证代理再将认证信息传给服务器进行认证,如下所示:
OTP传给 读/写认证信息
客户端―――――>认证代理接口->认证服务器
<―――――――>数据库
综上,可以认为认证服务器是在服务器接口基础上封装好的有图形操作界面的软件。代理接口是在使用到负载均衡时会采用的手段,一个代理会根据优先级设置查找多个认证服务器,一个服务器也可以按照优先级设置接收多个认证代理的请求。坚石诚信的OTP认证服务器软件采用了多种优化措施,以及多进程/多线程的高效处理,每秒钟能够完成3300次以上的认证。就目前实际情况而言,不超过千万级别的用户,都是没有必要做负载均衡的。
在这种模式下,需要数据库中按照OTP厂商定义的表结构创建数据库表,在调用接口中的API函数前,都需要先与数据库进行连接。集成过程如下:
(1)安装OTP认证服务器软件,包括OTP认证服务和OTP管理工具。
(2)在OTP管理工具中创建数据库及符合OTP厂商定义的数据库表。
(3)在应用系统中调用服务器接口API或者代理接口API完成认证。
服务器代理模式
该模式主要是针对一些具体应用而设计,不需要进行API接口开发就可以完成集成。由于其关联的东西较多,且软件界面都会有OTP厂商的标识,相对而言灵活性较差。这些具体应用一般包括:IIS/Apache网站保护、VPN Radius登录保护、Windows登录保护、Linux登录保护、Citrix远程登录保护、OWA登录保护等。集成过程如下:
(1)安装OTP认证服务器软件,包括OTP认证服务和OTP管理工具。
(2)根据不同的应用,安装对应的认证代理安装包。
(3)在应用中配置OTP认证保护。
- OTP在实际项目中的集成
- NHibernate在实际项目中的应用
- log4j在web项目中的实际使用
- 设计模式在实际项目中的应用
- log4j在web项目中的实际使用
- Nhibernate在实际项目中的使用
- AtomicInteger在实际项目中的应用
- AtomicInteger在实际项目中的应用
- boost在实际项目中的使用
- Nodejs, MemCacheD 在实际项目中的使用
- boost在实际项目中的使用
- AtomicInteger在实际项目中的应用
- AtomicInteger在实际项目中的应用
- boost 在实际项目中的使用
- 递归算法在实际项目中的应用
- 常见算法在实际项目中的应用
- 常见算法在实际项目中的应用
- AtomicInteger在实际项目中的应用
- Android M ROM 层拦截电话
- Oracle 查询时间
- html基础标签 回顾一
- nginx for windows
- session入库
- OTP在实际项目中的集成
- C#合并Excel单元格
- javascript中面向对象的技术
- 第八周项目一 建立顺序串的算法库
- linux 常用命令积累
- Android本地App与html5的交互
- RC隔离 更新where条件列 没有索引的情况
- Android studio 中NameValuePair跟BasicNameValuePair 不能正常导包问题
- 解决ADT Eclipse项目的Preference中,Java Compiler下没有Annotation Processing