前言:EAFC是咱們公司的一個框架,一個項目上,客戶的OA系統要調用咱們推送過去的代辦任務,但願能打開咱們的代辦處理界面,咱們的代辦處理界面是winform的。引出給出瞭如下的一個方案。在此備存。web
--------------------------------------------------------安全
第三方系統打開EAFC的實現服務器
藉助ClickOnce來實現第三方系統打開本地eafc客戶端,而不管第三方系統是網頁版仍是桌面版(好比在oa中點擊待辦事項,打開審批界面)。app
一. 參數框架
打開eafc,要支持客戶端參數。能夠經過ClickOnce傳遞參數給客戶端,以便客戶端根據傳入的參數作相應的動做。ide
1,外部系統 sysid。須要給每一個要打開eafc的外部系統分配惟一的編號,用於識別可信任系統。使用該系統id,能夠實現憑證的解密,用戶的映射等等。ui
2,認證信息 credential。經過認證信息,客戶端來肯定請求用戶的合法性。credential 的實現有多種,能夠是 帳號+密碼+隨機碼(加密後),也能夠是系統根據某種方式生成的token。加密
3,認證方式 auth_modeurl
能夠是 1:帳號密碼明文方式;2,帳號密碼密文方式;3:內部通行證方式。默認 1。orm
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)第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對應的本地用戶。不然驗證失敗。
3、外部系統的管理
外部系統打開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)其餘輔助列。