问答

如何让某个域的网站嵌套另一个域的网页,并跳过登录步骤?

作者:admin 2021-06-07 我要评论

有2个独立的网站,网站A,网站B。网站A想通过iframe嵌套网站B,网站B有登录机制,希望在网站A直接访问网站B,跳过登录步骤,请问网站B改怎么拓展才能支持? 当前...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

有2个独立的网站,网站A,网站B。网站A想通过iframe嵌套网站B,网站B有登录机制,希望在网站A直接访问网站B,跳过登录步骤,请问网站B改怎么拓展才能支持?

当前网站B的后台是用koa搭建的,在路由处通过判断ctx是否有session数据,如果没有则重定向,有则next();大致实现如此:

app.use(async (ctx, next) => {

    /* 目前需求希望能支持被 xxx.com网站嵌套的平台能跳过重定向
    let hostOrigin = getHostOrigin(ctx);

    if (hostOrigin === 'xxx.com') {
        await next();
    }
    */

    if (!ctx.session.user || !ctx.session.userid) {
        ctx.redirect('/#/login');
        return;
    }

    await next();
});

上述代码中的getHostOrigin(ctx)该如何实现呢?

###

问题已处理,通过请求头的referer字段判断。

如果从网站A首次访问网站B,从referer字段是分辨出来自网站A;
切换页面路径时此时referer字段是网站B本身;
如果是从空页面直接访问网站B,referer字段为空;

由此可以推断,如果referer是网站A则或网站B,则跳过重定向,其余情况不做处理。

###

网站B实现一个验签机制,可以通过链接方式登录.
形如这种链接: http://b.com?signature=asdfasdfasdfasdf&account=username&timestamp=16728281728;

网站B接收到请求时,检查是否带有这些参数.
如果有,就将其解密获得身份,然后走正常密码登录用户的逻辑,写cookie什么的.
否则重定向到账号密码登录页面.

网站A接入网站B时,使用网站A登录用户的身份信息,按照网站B的加密方式生成链接.

这种方式的好处就是前端无感知.加密解密都在后端,也比较安全.

###

iframe和外层窗口之间可以用postMessage通信。不知道这个在你的业务里用不用得到。

###

关键是你要自动登录啊,这就是说,两个网站有相同的用户系统。

那么,你可以通过通信,B 的前端去 A 的前端拿一个 Token,再拿到后台去认证(后台认证),认证过了之后给 B 发 Token,实现自动登录。

安全性上可能会有一些问题,需要仔细去验证一下。

###

后台读取 Referer 头部判断

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PHP-fpm怎么实现进程间同步与互斥的?

    PHP-fpm怎么实现进程间同步与互斥的?

  • ts类型问题

    ts类型问题

  • js不带引号的对象格式字符串怎么转为对

    js不带引号的对象格式字符串怎么转为对

  • Number.prototype.toFixed() 四舍五入

    Number.prototype.toFixed() 四舍五入

腾讯云代理商
海外云服务器