本文只是簡述單點登入解決方案,系統其他方面均省略
如上圖:系統基本架構
fr與es分為兩個不同的子專案,前端請求均通過訪問fr,由fr通過httpurlconnection訪問es(賦能層),fr主要作用為登入鑑權。大致請求流程如下:
1、password md5單向加密成新的password
(1) 如:localhost:8080/***manager-fr/loginservlet?name=***x&password=123456
(2) 密碼加密之後 password=asdf2jyf7q2g7hg723faklkh83;
2、根據相應規則生成請求流水號:id(如時間戳,可自定義生成規則)
(1) id = 123123123
3、id同其他引數一起進行asscii碼排序
(1) 根據引數名進行ascii碼排序 如排序後:string param = "id = 123123123&name=***x&password=asdf2jyf7q2g7hg723faklkh83";
4、對所有引數進行單向加密生成sign(數字簽名)
(1)加入加密金鑰 key
比如 key=d2adf53jd7sha7qdkdhd127d(key生成規則自己定);
string param = "id = 123123123&name=***x&password=asdf2jyf7q2g7hg723faklkh83&key=d2adf53jd7sha7qdkdhd127d";
(2)對 字串 param 進行單向加密生成sign(最好md5單向加密)
比如加密後 sign= 12d6wdjdka3939yf6dd6dyw729dhey;
5、fr通過httpurlconnection訪問es
url = localhost:8080/***manager-es/loginauth?id = 123123123&name=***x&password=asdf2jyf7q2g7hg723faklkh83&sign= 12d6wdjdka3939yf6dd6dyw729dhey;
6、es收到請求之後,和以上步驟一樣,取得所有引數,通過同樣的加密金鑰加密所有引數生成sign
(1) 請求流水號 id 由fr生成,作為引數傳入es,es不需要自己生成
(2)根據使用者名稱資料庫查詢 密碼是否一樣(資料庫中使用者密碼md5加密儲存),比較密碼是否一樣
(2)比較fr傳入的sign和es生成的sign是否一樣,一樣則通過,否則返回 數字簽名校驗失敗
(3)如果sign通過,根據使用者名稱資料庫查詢 密碼是否一樣(資料庫中使用者密碼md5加密儲存),比較密碼是否一樣
工作忙,還沒寫完,盡快補齊
SSO 單點登入完全解決方案 參考
2007年8月6日 11 49 03 發布 yaosansi sso 單點登入完全解決方案單點登入解決方案 sso解決方案 單點登入,跨域訪問,單點登陸,使用者跨域,跨域登入,跨域登陸解決方案 伺服器端可控情形js跨域訪問解決方法 單點登入的簡單實現 php實現webservices和跨域自動登陸 ...
SSO 單點登入理解及其解決方案
由於專案越來越大,大多專案開始拆分,如乙個電商系統可以拆分成,使用者系統 例如8080埠 訂單系統 例如8085埠 支付系統 例如9091埠 等 甚至很多服務會進行拆分,會做soa服務,會使用dubbo做微服務,或者簡單的小型分布式,這樣在服務與服務之間,或者系統與系統之間都是通過http或者res...
基於redis的單點登入解決方案
單點登入有兩種模型,一種是共同父域下的單點登入 例如網域名稱都是 xx.a.com 還有就是完全跨域下的單點登入 例如網域名稱是xx.a.com,xx.b.com 本文我們講一下完全跨域下的單點登入該怎麼實現。基於安全考慮,想通過cookie來實現這個功能是不太可能的了 也許有其他黑科技可以實現,這...