使用postMessage做單點(diǎn)登陸

? ? ? 最近公司需要做一個(gè)單點(diǎn)登陸,但是產(chǎn)品那邊不希望用戶跳轉(zhuǎn)或者打開新的頁面,所以方案使用了iframe 和postmessage來實(shí)現(xiàn)。

? ? ?先簡(jiǎn)單說一下實(shí)現(xiàn)單點(diǎn)登陸的方式。

第一: 使用cookie來做。拿到后端返回的cookies憑證,每次請(qǐng)求帶上。比較常用的方式。

缺點(diǎn)有2個(gè):安全性不高,cookies容易被人竊取。另一個(gè)就是不能跨域

第二:使用token,返回一個(gè)新的token來驗(yàn)證。后端返回一個(gè)token驗(yàn)證,請(qǐng)求的時(shí)候帶上。缺點(diǎn)就是萬一加密驗(yàn)證被獲取了,也容易被人攻擊。

第三:就是頁面跳轉(zhuǎn)。后端返回一個(gè)加密的token,跳轉(zhuǎn)到子應(yīng)用。缺點(diǎn)就是需要跳轉(zhuǎn),用戶體驗(yàn)稍微差點(diǎn)。

我們采取一個(gè)比較特殊的方式,在react項(xiàng)目中,iframe上面使用postMessage去完成請(qǐng)求拿到token完成單點(diǎn)登陸。

直接貼代碼了。

發(fā)送請(qǐng)求

const sendMessage = (frameId, originSrc, message) => {

let sendData = {

data: message,

i_token:window.localStorage.getItem('kp.token')

};

let id = frameId ||0;

window.frames[id].postMessage(JSON.stringify(sendData), originSrc);

}

監(jiān)聽并且回復(fù)請(qǐng)求

const listenMessage = (source, message) => {

window.addEventListener('message',function(event){

if (event.origin !== source)

return;

let data = {

msg: message,

i_token:window.localStorage.getItem('kp.token')

}

event.source.postMessage(JSON.stringify(data), event.origin);

},false);

}

postMessage 并且不像http請(qǐng)求一樣可以監(jiān)聽,所以不同類型的文件傳輸方式都沒有經(jīng)過檢驗(yàn),看文檔上面目前只允許字符串類型。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,217評(píng)論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,632評(píng)論 1 32
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,932評(píng)論 25 709
  • 塞下曲 王昌齡 飲馬渡秋水,水寒風(fēng)似刀。 平沙日未沒,黯黯見臨洮。 昔日長(zhǎng)城戰(zhàn),咸言意氣高。 黃塵足今古,白骨亂蓬...
    古詩新讀閱讀 1,944評(píng)論 0 3

友情鏈接更多精彩內(nèi)容