单点登录:两个不同域名Vue项目相互跳转并且传递Token

本文介绍了前端单点登录的概念,如何通过共用token实现多个系统免登,以及在Vue3中利用iframe和postMessage实现跨域下的登录共享。重点展示了在A页面向B页面传递token的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为前端 公司里面单点登录比较常见 ,提升用户体验,加快了访问资源效率。同时他也可以仅由前端实现

什么是单点登录?

实现原理?

不同情况下使用单点登录?

如何实现?

什么是单点登录

单点登录,字面意思 :仅点一次就可以登录。

       在公司的业务系统中,往往会有多个系统,并且这几个系统对应的都是同一个登录接口。次次登录对于公司用户体验肯定是不好的,对于后端上请求登录接口的频率也会增多。所以就有了这个单点登录:多个系统使用同一个登录接口,只需要登录一次就可以使得多个系统免登进入。

实现原理

       多个系统共用同一个登录获取的token,就是相当于父系统有多个子系统,这几个子系统共用父系统的访问令牌。父系统就是我们浏览器的cookie,相当于一个认证中心,浏览器的cookie保存了我们的访问令牌,就可以在子系统登录的时候拿到这个cookie的访问令牌进行免登。

不同情况下的单点登录?

1.同域名下的两个系统互相访问

       这个我还没做过 有需求的可以去看看别的博主写的啦 可以一起分享~

2.跨域下的两个系统互相访问

在跨域下 cookie是不共享的 所以我们直接部署一个认证中心 为我们的系统提供专门的服务,系统登录统一在这个认证中心进行登录,并将token写入cookie中,每个系统进入都可以自动获取到认证中心的cookie是否登录过。就是说认证中心携带的cookie是互通的。

如何实现?

直接上代码吧:A网页点击一个按钮去访问B网页

A网页:

B网页:

不用写在生命周期里面加载 我用的是vue3组合式写法 写在跟onMounted同一级

A网页:

// 获取 token
    var token = store.token;
    // 创建一个iframe,在iframe中加载一个跨域的网页
    var iframe = document.createElement("iframe");
    iframe.src = "http://11.222.333/b"
    document.body.append(iframe);
    // 使用postMessage()方法将token传递给iframe
    setTimeout(function () {
        iframe.contentWindow.postMessage(token, "http://11.222.333/b");
        window.open(iframe.src)
    }, 4000);

 

B网页:

// 监听跨域跳转获取新token存入localStorage实现获取访问令牌
window.addEventListener('message', function (event) {
    store.setToken(event.data)// 我利用store将localStorage封装了一层 实际上是localStorage.setItem('token',event.data)
}, false);

 有什么问题可以一起讨论~

当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。 所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。 比如说,我现在有3个分站点和1个认证中心(总站)。当用户访问分站点的时候,分站点会发Token到验证中心进行验证。验证中心判断用户是否已经登录。如果未登录,则返回到验证中心登录入口进行登录,否之则返回Token验证到分站点,直接进入分站点
当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。 所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。 比如说,我现在有3个分站点和1个认证中心(总站)。当用户访问分站点的时候,分站点会发Token到验证中心进行验证。验证中心判断用户是否已经登录。如果未登录,则返回到验证中心登录入口进行登录,否之则返回Token验证到分站点,直接进入分站点
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值