1 概述
西北油田分公司信息化经过长期建设,在各个业务点上,逐步搭建了适应业务管理的信息化系统,为分公司经营管理提供了强大的信息化辅助管理支撑。 但是,分公司前期建设的信息化系统都是基于传统办公自动化OA,目前逐步形成了多个单独业务系统组成的OA,如公文、合同、招投标、预结算等系统,这些系统之间没有统一的技术和数据标准,数据不能自动传递和共享,流程控制和标准多样化,从而形成了一个个彼此隔离的信息孤岛。
在此背景上,西北油田分公司搭建了一套整合分公司各种信息资源库的协同工作平台,形成统一、综合、开放的办公应用平台。
本文档为西北油田分公司内部应用系统接入统一的协同工作平台提供指导,提供应用系统接入统一用户管理平台、实现单点登录和统一任务集成的接口说明。
2 单点登录实现
2.1 原理概述
单点登录系统提供统一的认证页面、统一的当前用户加密和解密服务。
用户通过统一认证页面登录系统,当用户需要访问企业内部应用系统时,单点登录加密当前用户身份跳转至指定的应用系统,指定应用系统获取到当前加密身份后,通过调用单点登录服务进行解密,获取到用户真实身份进行认证。
当统一认证页面采用Windows认证模式时,那么同样采用Windows认证模式的应用系统,必须部署在同一应用程序池下,对于其他非Windows认证的系统,将采取上述加密跳转的方式。
2.2 统一认证页面
由单点登录系统提供,使用统一用户管理平台的账号和密码进行验证。用户访问企业内网门户或应用系统时,如果检测到未登录,则跳转至统一认证页面,用户登录后,再跳转至用户访问的页面。
统一认证页面地址:http://10.16.0.168/Portal/Login.aspx
统一认证页面输入输出参数如下
应用系统未认证时,跳转至统一认证页面,输入参数:
编码
|
输入方式
|
描述
|
SystemCode
|
Get/post
|
系统编码,由单点登录系统提供指定的编码,每个应用系统唯一,输入为空时,跳转至默认的门户页面
|
URL
|
Get/post
|
登录成功后,跳转到的应用系统URL,输入为空时,跳转至默认的门户页面
|
统一认证完成后,跳转至应用系统指定URL,输出参数:
编码
|
输入方式
|
描述
|
Token
|
Get
|
一次有效的验证Token,调用单点登录服务,可以得到当前用户的真实信息
|
2.3 单点认证服务
单点认证服务是提供给企业应用系统进行登录验证的服务,企业应用系统获取到Token后,以自己对应单点登录的SystemCode和Secret值,进行调用单点登录服务,解析得到统一平台的用户登录信息。
服务地址:http://10.16.0.168/SSO.asmx
单点认证服务提供2个WebService服务接口:
ü 获取统一认证平台用户账号接口
接口名称
|
GetAuthenticationUser
|
接口说明
|
获取已登录统一认证平台的用户账号
|
输入参数
|
参数编码
|
类型
|
说明
|
SystemCode
|
String
|
传入系统编码
|
Secret
|
String
|
传入系统秘钥
|
Token
|
Stirng
|
登录信息
|
输出参数
|
类型
|
说明
|
String
|
返回当前已登录统一认证系统的登录账号
|
ü 更改Secret接口
接口名称
|
UpdateSecret
|
接口说明
|
更改统一认证Secret信息
|
输入参数
|
参数编码
|
类型
|
说明
|
SystemCode
|
String
|
传入系统编码
|
Secret
|
String
|
传入旧的系统秘钥
|
NewSecret
|
Stirng
|
传入新的Secret信息
|
输出参数
|
类型
|
说明
|
bool
|
返回更改Secret值是否成功
|
3 应用系统单点登录接入
3.1 获取系统编码
系统编码是由单点登录服务提供的系统编码和解密秘钥。
编码
|
名称
|
说明
|
SystemCode
|
系统编码
|
文本类型,系统编码、企业内部唯一,不可变更
|
Secret
|
解密秘钥
|
文本类型,调用解密服务需要传入的参数,可以调用单点登录服务修改
|
以下是各应用系统编码,Secret可调用接口(参考3.4.4章节)自行修改:
系统名称
|
SystemCode
|
Secret
|
电子考勤系统
|
DZKQ
|
DZKQ
|
生产经营系统
|
SCJY
|
SCJY
|
招投标系统
|
ZTB
|
ZTB
|
无纸化会议
|
WZHHY
|
WZHHY
|
领导动态
|
LDDT
|
LDDT
|
3.2 统一登录页面
注:该功能为预留使用,本期项目可以不实现,应用系统只需要做好单点登录,仍然可保留已有的登录界面,让用户即可从统一平台登录界面进行登录系统,也可以从已有的系统登录界面进行登录系统。
统一单点登录页面URL:http://10.16.0.168/Portal/Login.aspx
当用户请求页面,并且未登录时,统一跳转至单点登录服务提供的登录页面地址,
http://10.16.0.168/Portal/Login.aspx?q={URL}&SystemCode={SystemCode}
参数说明
编码
|
名称
|
说明
|
URL
|
应用系统URL
|
单点登录成功后跳转到应用系统的URL地址
|
SystemCode
|
系统编码
|
单点登录系统编码
|
示例:当前应用系统编码是SCJY,用户请求的页面URL为:http://192.0.0.1/Default.aspx,
则跳转至:
http://10.16.0.168/Portal/Login.aspx?q= http://192.0.0.1/Default.aspx&SystemCode=SCJY
|
3.3 系统间单点登录跳转
系统之家的单点登录实现,都需要通过统一登录页面进行实现,例如A系统访问B系统的 Default.aspx页面,则需要使用:http://10.16.0.168/Portal/Login.aspx?q=http://B/Default.aspx。
3.4 应用系统单点登录实现过程
3.4.1 单点登录过程
本章节描述了应用系统对于单点登录需要做的事情和过程。
应用系统从URL中获取到Token值,通过SystemCode和Secret调用单点登录服务,解析得到用户的统一用户管理平台中的账号,在本系统实现登录验证。
单点登录需要支持的页面:所有在统一平台中需要加上链接的页面和表单界面。
以上页面中,在判断当前系统用户登录认证之前,按照以下步骤进行:
1. 如果URL中有Token值,则进入3,否则进入2
2. 跳转至本系统的登录界面;
3. 调用单点登录服务进行解密,得到用户的真实账号;
4. 使用解密得到的账号自动进行本系统登录认证,完成单点登录;
3.4.2 单点登录界面说明
本期项目以下功能需要实现单点登录:
系统名称
|
集成功能
|
公文管理系统
|
公司发文、公司收文、公司工作联系单、公司会议记要审批件流转、部门发文、流程审核表单
|
合同管理系统
|
合同查询、合同台账、流程审核表单
|
招投标系统
|
招投标流程运行监控、项目运行监控、招标会议安排招标项目台账、评标专家维护、流程审核表单
|
生产经营管理系统
|
业务跟踪查询、流程审核表单
|
电子考勤系统
|
考勤管理、特殊考勤申请、考勤记录查询、流程审核表单
|
无纸化会议系统
|
会议室使用情况、无纸化会议申请、会议材料上传、流程审核表单
|
领导动态
|
行程动态登记、行程动态查询
|
内控管理系统
|
部门控制目标、内控手册查询、内控全文索引
|
电子邮件系统
|
未处理邮件数提醒
|
注:请各应用系统将以上功能的测试环境和正式环境的URL访问地址,提供给信息化管理中心董小诗。
3.4.3 获取Token
从统一认证平台跳转至应用系统时,统一认证平台会将当前的用户加密信息以Get方式进行发送至应用系统。
例如:应用系统URL地址http://192.0.0.1/Default.aspx,统一认证平台返回的URL地址为
http://192.0.0.1/Default.aspx?Token={Token}
参数说明
编码
|
名称
|
说明
|
Token
|
访问的Token
|
一次性使用,可以通过单点登录服务得到真实账号
|
注:每次登录Token值只一次有效。
3.4.4 获取应用系统用户账号
应用系统获取Token后,调用单点登录服务提供的解密服务,得到真实账号,单点登录服务以WebService方式提供。
接口名称
|
GetAuthenticationUser
|
接口说明
|
获取已登录统一认证平台的用户账号
|
输入参数
|
参数编码
|
类型
|
说明
|
SystemCode
|
String
|
传入系统编码
|
Secret
|
String
|
传入系统秘钥
|
Token
|
Stirng
|
登录信息
|
输出参数
|
类型
|
说明
|
String
|
返回当前应用系统的用户账号
|
应用系统获取到返回当前应用系统的用户账号后,需要进行本系统的登录操作。
3.4.5 更改Secret信息
为了安全考虑,Secret值可以根据应用系统需要进行请求修改。修改过程调用统一单点登录服务进行完成。
单点登录系统提供接口如下:
接口名称
|
UpdateSecret
|
接口说明
|
更改统一认证Secret信息
|
输入参数
|
参数编码
|
类型
|
说明
|
SystemCode
|
String
|
传入系统编码
|
Secret
|
String
|
传入旧的系统秘钥
|
NewSecret
|
Stirng
|
传入新的Secret信息
|
输出参数
|
类型
|
说明
|
bool
|
返回更改Secret值是否成功
|
3.4.6 提供系统用户表
如果应用系统不是使用AD域账号,并且本系统用户没有与AD用户对应的用户关系映射表,那么需要做2个事情:
1. 对于已有的系统用户,导出系统用户清单提供给统一平台,导出格式为:
2. 对于新增用户(不在系统用户清单的用户),严格使用AD账号,否则不能正常单点登录。
3.5 统一用户管理集成
注:如果应用系统组织和用户不需要从AD做同步,仍然可以采取已有的方式进行维护,可以忽略此章节。
企业应用系统用户管理必须以统一用户管理平台提供数据为基础,系统定时或者管理员手动从统一用户管理平台进行同步。
使用统一用户管理后,应用系统不需要再从本系统进行维护组织和系统账号,所有系统账号创建、删除权在统一用户管理平台,应用系统需要实现从该平台进行组织同步。
统一用户管理平台提供组织、用户的数据接口,企业应用系统可以通过接口进行同步数据。
3.5.1 统一用户管理数据结构
ü 组织数据结构(OrganizationUnit)
字段名称
|
类型
|
说明
|
ObjectID
|
字符串
|
组织ID,唯一标示
|
Code
|
字符串
|
组织编码
|
Name
|
字符串
|
组织名称
|
ParentID
|
字符串
|
上级组织ID,如果为空,则表示是顶层组织
|
ManagerID
|
字符串
|
组织经理的用户ID,关联用户ObjectID
|
ModifiedTime
|
日期
|
组织最后修改日期
|
State
|
整数类型
|
启/禁用,0表示启用,1表示禁用
|
ü 用户数据结构
字段名称
|
类型
|
说明
|
ObjectID
|
字符串
|
用户ID,唯一标示
|
Code
|
字符串
|
编码、AD账号
|
Name
|
字符串
|
姓名
|
Appellation
|
字符串
|
称谓
|
EmployeeNumber
|
字符串
|
员工工号
|
ParentID
|
字符串
|
所属组织ID,关联组织ObjectID
|
ManagerID
|
字符串
|
上级经理ID,关联用户表ObjectID
|
Mobile
|
字符串
|
用户手机号码
|
Email
|
字符串
|
用户邮箱号码
|
OfficePhone
|
字符串
|
办公电话
|
State
|
整数类型
|
启/禁用,0表示启用,1表示禁用
|
ModifiedTime
|
日期
|
修改日期
|
3.5.2 统一用户管理平台接口
ü GetCompany()
方法说明:获取根目录的组织架构信息
输入参数
|
参数名称
|
类型
|
说明
|
无
|
|
|
返回值
|
类型
|
说明
|
OrganizationUnit
|
组织机构对象
|
ü GetAllOrganizationUnit()
方法说明:获取所有组织数据
输入参数
|
参数名称
|
类型
|
说明
|
无
|
|
|
返回值
|
类型
|
说明
|
OrganizationUnit[]
|
组织机构数组
|
ü GetAllUser()
方法说明:获取所有用户数据
输入参数
|
参数名称
|
类型
|
说明
|
无
|
|
|
返回值
|
类型
|
说明
|
User[]
|
用户数组
|
4 统一任务集成
4.1 集成说明
统一任务集成平台是西北油田分公司所有应用系统的待办任务综合处理平台,所有应用系统待办都接入统一任务集成平台处理。用户可以直接登录该平台,处理分散在所有系统中的任务。
所以我们需要所有应用系统将用户待办/待阅任务能即时推送至统一任务集成平台,并且和统一任务集成平台实现单点登录,方便用户进行操作。
基于移动扩展考虑,并且展示统一移动模式表单,应用系统还需要提供表单数据接口和表单操作接口,方便统一任务集成平台实现移动扩展。
统一任务集成过程如下图所示:
4.2 统一任务集成接口说明
接口服务地址:http://10.16.0.168/Portal/WorkItemService.asmx
ü 接口名称:AddUnFinishedWorkItem
方法说明:应用系统推送待办任务至统一任务集成平台
参数说明:
输入参数
|
参数名称
|
类型
|
说明
|
SystemCode
|
string
|
系统编码,由SSO服务提供
|
Secret
|
string
|
系统秘钥,由SSO服务提供
|
ID
|
string
|
应用系统工作任务唯一标示
|
WorkflowName
|
string
|
流程模板名称:如请假申请、发文审批
|
InstanceName
|
string
|
流程实例名称:例如张三的年假审批
|
ActivityName
|
string
|
环节名称:例如领导审批
|
Originator
|
string
|
发起人账号:流程发起人的中石化邮箱账号
|
Participant
|
string
|
当前任务处理人的中石化邮箱账号
|
ReceiveTime
|
Datetime
|
任务接收时间
|
PriorityType
|
PriorityType
|
枚举类型,待办的优先级
Low = 0, // 低
Normal = 1, // 中(默认值)
High = 2 // 高
|
ItemType
|
int
|
待办/待阅,0是待办/1是待阅
|
AllowReject
|
Bool
|
是否允许驳回
|
MobileProcessing
|
Bool
|
是否允许移动办公审批
业务系统自己判定,当存在复杂操作的表单逻辑和操作时,可以设置不支持在移动端操作,例如发起环节的填写。
|
Url
|
string
|
应用系统打开当前工作任务的URL
|
返回值
|
类型
|
说明
|
bool
|
任务推送是否成功
|
示例程序
|
// 调用一个任务推送,将任务ID=12345的任务推送至统一任务集成平台
bool result = workItemService.AddUnFinishedWorkItem(
"系统编码",
"系统秘钥",
"12345", // 应用系统的任务ID
"请假申请",
"张三的事假申请",
"主管审核",
"zhangs.xbsj",
"wangw.xbsj",
new DateTime(2015, 10, 31, 12, 21, 05),
PriorityType.Normal,
0,
"http://10.1.0.100/System/Apply.aspx?ID=12345"
);
|
ü 接口名称:FinishWorkItem(string SystemCode,string Secret,string ID)
方法说明:应用系统任务完成时,通知统一任务平台
参数说明:
输入参数
|
参数名称
|
类型
|
说明
|
SystemCode
|
string
|
系统编码,由SSO服务提供
|
Secret
|
string
|
系统秘钥,由SSO服务提供
|
ID
|
string
|
待办任务在应用系统中的唯一标示
|
返回值
|
类型
|
说明
|
bool
|
统一任务处理平台调用是否成功
|
4.3 应用系统需要提供接口说明
在PC端,统一任务集成平台通过单点登录直接打开应用系统表单URL,所有操作均由应用系统完成。
在移动端,统一任务集成平台通过获取应用系统表单数据,统一转换成移动办公模式表单进行展示,用户直接使用转换后的移动办公表单进行任务操作,所以应用系统需要向统一任务集成平台提供表单数据接口和表单操作接口。
4.3.1 移动端表单数据集成接口
应用系统需要构造接口返回数据结构,以WebService形式提供给统一任务集成平台进行调用。也就是说,以统一任务集成平台的提供数据结构,构造SheetData[]数组,返回给统一任务集成平台使用。
接口说明:统一使用名称 LoadSheetData
输入参数
字段名称
|
类型
|
说明
|
Token
|
string
|
统一平台会调用SSO加密服务将结果传递至应用系统,应用系统再调用解密服务验证Token值的真实有效性,然后进行处理。
|
ID
|
string
|
任务唯一标示
|
SheetData定义示例:
返回数据示例:
应用系统必须提供2个接口方法给统一任务集成平台调用,方便统一平台在移动端审批时,能实现应用系统的提交、驳回操作,接口提供推荐使用WebServices模式。4.3.2 移动端表单操作接口
接口一:提交任务接口,统一使用名称 SubmitItem
接口需要接收3个参数:
字段名称
|
类型
|
说明
|
Token
|
字符串
|
统一平台会调用SSO加密服务将结果传递至应用系统,应用系统再调用解密服务验证Token值的真实有效性,然后进行处理。
|
ID
|
字符串
|
任务唯一标示
|
CommentText
|
字符串
|
当前任务审核意见
|
SheetData
|
字符串
|
移动审批修改的数据项值,以JSON格式传递,当不修改时传递为空。
例如:
{数据项名称1:"数据项1的值",数据项名称2:"数据项2的值"}
|
接口二:驳回任务接口,统一使用名称 RejectItem
接口需要接收3个参数:
字段名称
|
类型
|
说明
|
Token
|
字符串
|
统一平台会调用SSO加密服务将结果传递至应用系统,应用系统再调用解密服务验证Token值的真实有效性,然后进行处理。
|
ID
|
字符串
|
任务唯一标示
|
CommentText
|
字符串
|
当前任务审核意见
|
SheetData
|
字符串
|
移动审批修改的数据项值,以JSON格式传递,当不修改时传递为空。
例如:
{数据项名称1:"数据项1的值",数据项名称2:"数据项2的值"}
|