天天看點

bboss 票據實作系統SSO功能介紹

測試環境應用賬号:

appid:gspoffice

secret:52ad4782-9002-4b88-9c70-83858d772b69

第一種方案:比較複雜

登入時擷取ticket,自己儲存在某個地方(session或者資料庫都行):

String url = "http://bboss.bbossgroups.com/token/v2/genTicket.freepage?appid="+appid + "&secret="+secret + "&account="+account+ "&worknumber="+worknumber;
String ticket = org.frameworkset.spi.remote.http.HttpReqeust.httpPostforString(url);
ticket 格式:
{
ticket:令牌
resultcode: 操作結果碼
livetime:ticket有效期,每次通路時會重新整理通路時間,以最近通路時間為起點計算有效期,有效期内都可以使用
message:錯誤資訊

}      

每次跳轉到其他系統擷取帶有時效性的一次性臨時令牌,作為參數傳遞給其他系統:

String url = "http://bboss.bbossgroups.com/token/v2/getAuthTempToken.freepage?appid="+appid + "&secret="+secret + "&ticket="+ticket;
String token = org.frameworkset.spi.remote.http.HttpReqeust.httpPostforString(url);      

token 格式:

{

resultcode: 操作結果碼

token:臨時token

message:錯誤資訊

}

其他系統得到令牌,通過令牌擷取使用者賬号和工号,擷取完畢後臨時令牌失效:

String url = "http://bboss.bbossgroups.com/checktoken/v2/checkToken.freepage?appid="+appid + "&secret="+secret + "&token="+token;
String personresult = org.frameworkset.spi.remote.http.HttpReqeust.httpPostforString(url);

personresult 格式:
{
validateResult:boolean 如果擷取到使用者資訊則為true,否則為false
resultcode: 操作結果碼
userAccount:使用者賬号
worknumber:使用者工号
message:錯誤資訊

}
      

第二種方案,更加簡單

直接擷取臨時票據

跳轉時擷取一個臨時性的ticket:

String url = "http://bboss.bbossgroups.com/token/v2/getTempTicket.freepage?appid="+appid + "&secret="+secret + "&account="+account+ "&worknumber="+worknumber;
String ticket = org.frameworkset.spi.remote.http.HttpReqeust.httpPostforString(url);
ticket 格式:
{
ticket:令牌
resultcode: 操作結果碼
livetime:ticket有效期,每次通路時會重新整理通路時間,以最近通路時間為起點計算有效期,有效期内都可以使用
message:錯誤資訊

}      

其他系統擷取到臨時ticket,通過臨時ticket擷取使用者賬号和工号,同時臨時ticket會失效(臨時ticket的有效期在令牌伺服器端設定):

String url = "http://bboss.bbossgroups.com/checktoken/v2/checkTicket.freepage?appid="+appid + "&secret="+secret + "&ticket="+ticket;
String personresult = org.frameworkset.spi.remote.http.HttpReqeust.httpPostforString(url);

personresult 格式:
{
validateResult:boolean 如果擷取到使用者資訊則為true,否則為false
resultcode: 操作結果碼
userAccount:使用者賬号
worknumber:使用者工号
message:錯誤資訊

}      

接下來我們來運作第二種方案:

在chrome浏覽器中輸入位址擷取臨時ticket:

http://bboss.bbossgroups.com/token/v2/getTempTicket.freepage?appid=gspoffice&secret=52ad4782-9002-4b88-9c70-83858d772b69&account=yinbp&worknumber=10006673      

響應以下json封包,說明臨時ticket生成正确,ticket的有效期是60秒:

{"resultcode":"ok","ticket":"tmptk_564b1212-7dce-4180-a885-44b235bced05","livetime":60000,"message":null}      

通過上面生成的ticket擷取使用者賬戶和工号,在chrome中輸入以下請求:

http://bboss.bbossgroups.com/checktoken/v2/checkTicket.freepage?appid=gspoffice&secret=52ad4782-9002-4b88-9c70-83858d772b69&ticket=tmptk_e8d179c3-cfe9-41cb-ba81-d466e19c5e0f      

如果浏覽器中響應以下json封包,說明通過ticket擷取賬号和工号正确:

{"resultcode":"ok","userAccount":"yinbp","worknumber":"10006673","message":null,"validateResult":true}      

如果浏覽器中響應以下json封包,說明ticket已經不存在,擷取賬号和工号為null:

{"resultcode":"TICKETNOTEXIST","userAccount":null,"worknumber":null,"message":null,"validateResult":false}      

如果浏覽器中響應以下json封包,說明ticket已經失效,擷取賬号和工号為null:

{"resultcode":"TICKETEXPIRED","userAccount":null,"worknumber":null,"message":null,"validateResult":false}