前言:EAFC是我们公司的一个框架,一个项目上,客户的OA系统要调用我们推送过去的代办任务,希望能打开我们的代办处理界面,我们的代办处理界面是winform的。引出给出了以下的一个方案。在此备存。

--------------------------------------------------------

第三方系统打开EAFC的实现

借助ClickOnce来实现第三方系统打开本地eafc客户端,而无论第三方系统是网页版还是桌面版(比如在oa中点击待办事项,打开审批界面)。

一. 参数

打开eafc,要支持客户端参数。可以通过ClickOnce传递参数给客户端,以便客户端根据传入的参数做相应的动作。

1,外部系统 sysid。需要给每个要打开eafc的外部系统分配唯一的编号,用于识别可信任系统。使用该系统id,可以实现凭证的解密,用户的映射等等。

2,认证信息 credential。通过认证信息,客户端来确定请求用户的合法性。credential 的实现有多种,可以是 账号+密码+随机码(加密后),也可以是系统根据某种方式生成的token。

3,认证方式 auth_mode

可以是 1:账号密码明文方式;2,账号密码密文方式;3:内部通行证方式。默认 1。

4,应用 app

要打开的应用的编号。无默认值

5,要打开的功能编号 func

登录后,自动打开的功能,只能一个。

6,功能参数 func_param

7,其他参数:

(1)tm 树形菜单 0:隐藏,1打开,默认打开

(2)dm下拉菜单 0:隐藏,1打开,默认打开

(3)title:窗口标题,默认系统原标题

(4)sm:自启动模块,0:禁止,1:启用,默认启用

(5)size:窗口大小,w,h或者 max最大化,默认最大化。

二,接口功能与用户认证

1. 取任务列表

条码系统通过提供webservice,供外部系统(比如茂名OA系统)调用以获得某个用户的待办任务列表。

参数:系统id,用户凭据credential,时间范围。。。

根据系统id,来判断采用哪种用户验证方式(系统可以配置对每个外部系统的验证方法,验证链),验证通过后,转换为本地系统用户。

其中,用户凭据可以是账号密码,可以是明文或者加密,比如使用des或者rsa加密,推荐使用rsa非对称加密。如果使用des的话,最好不同外部系统使用不同的加密密钥。根据 “账号 +  密码 + 随机码”形成字符串,进行加密形成。加随机码的目的是:使即便是同一个人,每次形成的credential也不同,避免重放攻击。在登录时,将credential发送给服务端,解析出账号和密码进行验证。

2. 打开待办任务

通过客户端打开待办任务时,必须以某个账号登录到系统。因为登录信息通过ClickOnce参数传递,要考虑安全性,比如密码不要使用明文,还要避免重放攻击。

在形成代办事项列表时,将credential形成在待办任务的处理url中。代办列表的格式:

http:/[ip]/eafc.appliction?credential=<验证串>&auth_mode=2&func=<功能号>&......

credential 的形成有两种(参见一、参数 1.认证方式),如下:

(1)第1种方式,用户账号+密码方式

credential。加密方式和验证方式参见第一部分的说明。

(2)第2种方式

其中credential由系统随机生成,并存放在表中,表的格式:

凭据表名:ams_sys_credential

(1)credential     char(100)   -- 可以是guid,只要是随机的不重复,且很难猜出来就行。

(2)user_id         number     -- 对应的本系统用户

(3)create_time   datetime   -- 创建时间

(4)exp_time      datetime    -- 过期时间 过期后,该凭据无效。系统会自动删除过期的凭证。

打开待办任务时,eafc从参数中取得credential串,发送给服务器进行验证,验证程序在凭据表ams_sys_credential中查找该credential,如果存在且没有过期,验证通过,返回该credential对应的本地用户。否则验证失败。

三、外部系统的管理

外部系统打开eafc时,需要传递外部系统id。外部系统id由eafc统一分配和管理。对不同的外部系统,eafc可以使用不同的用户凭证验证方式;凭据加解密,用户映射。

1,凭证验证方式。不同的外部系统可能支持不同的用户验证方式,比如茂名oa可能是ad域用户验证,其他系统也可能是本系统自己验证(提供验证服务)。或者是多种验证方式的组合(验证链)。eafc可以根据不同的系统,配置不同的验证方式。

2,凭据加解密。根据不同的外部系统,配置不同的加解密方式,以及存放加解密密钥。

3,用户映射。有时候外部系统传入的用户账号是外部系统本地用户而不是eafc的用户信息。在通过外部系统账号登录时,验证通过后,需要转换成eafc本地系统用户。

除了外部系统需要登录eafc外,相对应的,eafc也可能需要登录外部系统,比如茂名的投资计划管理系统。也需要以上的3点信息。

外部系统管理的相关表:

1,外部系统注册表 ams_sys_trust_system

(1)系统id varchar(20)

(2)系统描述

(3)系统登录页面

2,外部系统详细信息表 ams_sys_trust_system_dtl

(4)对外部系统的加密方法 --提供给外部系的加解密方法 des或者rsa

(5)外部系统提供的加密方法 --满足外部系统要求的加解密方法,des或者rsa

(6)对外部系统的加密参数

(7)外部系统提供的加密参数

(8)对外部系统提供的加解密provider ;用来解密外部系统传过来的加密的凭据

(9)外部系统的加解密provider;用来将明文加密靠后传送给外部系统

(10)验证链 --外部系统登录本系统时的验证链

2,用户映射关系 ams_sys_user_mapping

(1)系统id

(2)内部用户id

(4)外部系统用户账号

(5)外部系统用户密码

(6)其他辅助列。

第三方系统打开EAFC的实现的更多相关文章

  1. java 调用第三方系统时的连接代码-记录

    前言:该文章主要是总结我在实际工作中遇到的问题,在调取第三方系统的时候出现的问题,算自己的总结.各位博友如果有什么建议或意见欢迎留言指正. 先将准备传入参数 再与第三方系统建立连接 再第三方系统处理后 ...

  2. C#获得系统打开的端口和状态

    实际是通过c#编程方式调用了CMD命令行,然后调用netstat命令,然后将CMD命令的输出流转到了C#控制台程序上.也可以将结果输出到文件. using System; using System.C ...

  3. Linux系统打开core dump的配置【转】

    什么是core dump core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.core du ...

  4. 微信文档采用第三方方式打开选择qq

    本篇文章主要记录解决: 微信打开文档后,----选择第三方应用打开---选择自己的项目,跳转到--列表选择界面--选择好友---然后返回到最近聊天界面,其中列表选择界面onDestroy的问题. 反编 ...

  5. 应用SAP PI实现SAP BW数据仓库对于第三方系统数据完美集成以及DELTA加载的分析

    注明:本篇的技术性细节参考了SAP SCN上的一篇SAP PI 和BW集成的文章,本篇文章并不打算过多探讨实现的技术细节,因为在SCN上的这篇英文文章已经完全涵盖了技术细节和配置步骤 大家可以通过搜索 ...

  6. Mac系统打开命令行终端及查看操作系统版本号的方法

    Mac系统打开命令行终端的方法: 应用程序 --> 实用工具 --> 终端 Mac系统终端查看操作系统版本号的方法: 输入:#more /System/Library/CoreServic ...

  7. Java 后台请求第三方系统接口详解

    //调用第三方系统接口 PrintWriter out = null; BufferedReader in = null; JSONObject jsonObject = null; Closeabl ...

  8. 使用SAP open connector调用第三方系统的API

    我们把hubspot这个SaaS CRM作为第三方系统,首先登录hubspot,创建一个新的API key: 把创建的key拷贝到剪切板里: 然后登录SAP Cloud for Customer上的o ...

  9. lsof---列出当前系统打开的文件信息

    lsof---list open file,一个列出当前系统打开文件的工具 1.lsof查找原理 在Linux系统中,系统为了方便管理进程,会在/proc下为每一个运行中的进程创建一个目录,目录名就是 ...

随机推荐

  1. HDU 1358 Period KMP

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1358 求周期问题,简单KMP—— AC代码: #include <iostream> # ...

  2. Android中库项目、jar包等的使用方法

    在软件开发过程中,程序代码的复用,是非常重要的概念.我们总是需要使用一些现有的模块.包.框架,或开发自己的模块.包.框架,来实现对程序代码的复用.比如在JavaWeb编程过程中,经常使用的Struts ...

  3. Android 中文API (67) —— BluetoothClass.Device.Major

    前言 本章内容是android.bluetooth.BluetoothClass.Device.Major,为Android蓝牙部分的章节翻译,版本为Android 2.3   r1,翻译来自中山大学 ...

  4. mysql待整理

    1. MYSQL SQL_NO_CACHE的真正含义 http://www.dewen.org/q/5149/Mysql 是 结果不缓存,但查询还是缓存了. 如果要重新测试,就在查询前先执行一下&qu ...

  5. javaweb学习路之四--cxf发布Webservice

    背景:maven构建的springMvc+mybatis框架 源码--->https://github.com/Zering/MyWeb 步骤:(本步骤是自己在实际探索过程中的步骤,我的思路是先 ...

  6. CSS: inline-block的应用和float块高度塌陷

    普通流高度塌陷: 当块float浮动时,不会对块布局产生影响,块仍然会按照左右或者上下的顺序排列.但是会影响文档的排列,当文档的高度超过块的高度时,块的高度会产生塌陷现象.   高度塌陷解决方法:   ...

  7. JavaScript基础知识----六道有趣的Js基础题以及解答

    题目: 1.找出数字数组中最大的元素(使用Math.max函数)2.转化一个数字数组为function数组(每个function都弹出相应的数字)3.给object数组进行排序(排序条件是每个元素对象 ...

  8. 通过原生js的ajax或jquery的ajax获取服务器的时间

    在实际的业务逻辑中,经常是与时间相关的,而前端能获得的时间有两个:客户端的时间,服务器的时间. 客户端时间通过 javascript中的Date对象可以获取,如 var dt = new Date() ...

  9. QT学习 之 事件与事件过滤器(分为五个层次)

    事件 在Qt中,事件是作为对象处理的,所有事件对象继承自抽象类QEvent.此类用来表示程序内部发生或者来自于外部但应用程序应该知道的动作.事件能够能过被 QObject 的子类接受或者处理,但是通常 ...

  10. 腾讯QQ是用什么语言开发的(转)

    腾讯QQ的部分COM组件用的VC6,用exescope看其中几个dll的依赖,依赖于MFC42.dll,MSVCRT.dll,MSVCP60.dll都说明是VC6写的. 还有一部分用的VS2005,包 ...