方案流程图
插件安装说明
登录Workfine控制台,在插件中心导入E-Office(以下简称EO)单点登录支持插件后重启Workfine服务即可。
E-Office配置说明
登录管理员用户,在菜单栏中进入全部应用=>设置管理=>系统管理=>菜单配置,添加一个菜单Workfine
在菜单Workfine下再建立一个子菜单,配置如下:
点击路径右侧的设置按钮,可以配置相关参数。具体配置说明见下一章节。
URL和参数说明
EO根据加密规则生成URL,用户点击后跳转到Workfine并进行校验、账号绑定、颁发token实现登录操作。
URL规则如下(需要注意大小写):
https://workfine_url:port/#/ExtLogin?sid=solution_id&scheme=EOffice&uid=user_id&sign=sign×tamp=timestamp&redirect=route_param
参数名称 | 说明 | 备注 |
---|---|---|
workfine_url | Workfine的访问地址 | 注意区分内外网 |
port | Workfine的访问端口 | 默认5000 |
sid | 应用编号 | 可以在设计端=>系统设置的最下方找到 |
scheme | 登录方案 | 固定值:EOffice |
uid | 用户id | EO内当前登录用户的ID |
sign | 参数签名 | #userId#accesskey#timestamp# 其中,accesskey内容由自己决定,英文+数字即可 |
timestamp | 时间戳 | 毫秒时间戳 |
redirect | 需要访问的业务路由 | 可以从应用端截取,需要进行urlencode |
签名方案原理
EO将用户编号、时间戳和预留的访问key进行摘要计算,生成签名后添加到URL中再访问。Workfine的SSO模块收到参数后将提供的编号、时间戳与本地保留的key进行同样的计算。最后比对是否一致,从而验证请求是否合法,参数是否被篡改。
验证合法后还需要将时间戳与服务器当前时间作对比,如果时间差超过10秒钟,则该请求不合法,直接作废。
签名需要使用user_id+accesskey+timestamp组合后取md5来获取。
js示例代码:
function sign(userid){
const accesskey='accesskey'
let str="+userld
str+=accesskey
str+=Math.round(new Date().getTime()/1000)
return md.5(str)//md5()默认js不支持,可以从github获取
JavaScript MD5下载地址:https://github.com/blueimp/JavaScript-MD5
登录插件配置说明
EO登录插件基于Workfine扩展,用于实现本方案的单点登录功能。
其中有一些参数需要设置,配置文件地址为:Workfine安装目录/server/appsetting.json
所有配置属性在EOfficeAuthenticationOptions节点,如果不存在则新建一个。该节点下的可配置属性如下表:
参数名称 | 说明 | 备注 |
---|---|---|
HashAlgorithm | 摘要计算方式 | 默认为md5,不需要调整 |
HashSalt | 访问key | 约定好的accesskey即可 |
SlidingSeconds | 过期时间 | 链接基于时间戳的过期时间,单位秒。不设置则默认为60秒过期 |
配置完后效果如图:
绑定错误的处理
目前绑定错误需要在数据库中进行解绑操作。
在workfine帐套所在数据库tb_sys_identity_user_claim
表里,根据EO的用户编号查找claim_value
相等的那条记录,删除即可
#泛微e-office
请登录后查看评论内容