美文网首页web前端
使用postMessage做单点登陆

使用postMessage做单点登陆

作者: eveah | 来源:发表于2018-06-26 17:59 被阅读0次

      最近公司需要做一个单点登陆,但是产品那边不希望用户跳转或者打开新的页面,所以方案使用了iframe 和postmessage来实现。

     先简单说一下实现单点登陆的方式。

第一: 使用cookie来做。拿到后端返回的cookies凭证,每次请求带上。比较常用的方式。

缺点有2个:安全性不高,cookies容易被人窃取。另一个就是不能跨域

第二:使用token,返回一个新的token来验证。后端返回一个token验证,请求的时候带上。缺点就是万一加密验证被获取了,也容易被人攻击。

第三:就是页面跳转。后端返回一个加密的token,跳转到子应用。缺点就是需要跳转,用户体验稍微差点。

我们采取一个比较特殊的方式,在react项目中,iframe上面使用postMessage去完成请求拿到token完成单点登陆。

直接贴代码了。

发送请求

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);

}

监听并且回复请求

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请求一样可以监听,所以不同类型的文件传输方式都没有经过检验,看文档上面目前只允许字符串类型。

相关文章

  • 使用postMessage做单点登陆

    最近公司需要做一个单点登陆,但是产品那边不希望用户跳转或者打开新的页面,所以方案使用了iframe 和pos...

  • 网络安全之反序列化漏洞复现

    0x01 Apereo cas简介 Apereo CAS 单点登陆系统是Java服务器环境下使用较为广泛的单点登陆...

  • 使用serviceWorker做前端的单点登陆

    网上关于serviceWorker一般是用于做PWA的,这里介绍的不是这个,如需了解,自行百度 原理: servi...

  • 单点登陆SSO(Single Sign On)

    Q:什么是单点登陆 在多系统应用群众登陆一个系统,便可在其他所有系统中得到授权而无需再次登陆,包括单点登陆和单点注...

  • 网页和 iframe 如何通讯

    使用 postMessage 通讯 使用 window.addEventListener("message",()...

  • window.postMessage解决前端ajax跨域问题

    postMessage畅快解决跨域问题 本文主要是记录使用window.postMessage解决ajax跨域问题...

  • Session和EL表达式实现登陆验证

    现在多系统的登陆都采用单点登陆了,emmmm......后期再更单点登陆的,这次由于只是个小demo,所以我们采用...

  • cas 单点登录

    CAS 单点登录简介cas单点登陆。就这一篇就够了!!!!!

  • 单点登陆

    单系统登陆 普通的单个系统登陆流程是什么样子的呢?用户访问系统,如果访问的是受限制的资源,比如http://loc...

  • 单点登陆

    一、前言 什么是SSO? SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需...

网友评论

    本文标题:使用postMessage做单点登陆

    本文链接:https://www.haomeiwen.com/subject/xwymyftx.html