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

有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)该如何实现呢?

回答

网站B实现一个验签机制,可以通过链接方式登录.

形如这种链接: http://b.com?signature=asdfasdfasdfasdf&account=username&timestamp=16728281728;

网站B接收到请求时,检查是否带有这些参数.

如果有,就将其解密获得身份,然后走正常密码登录用户的逻辑,写cookie什么的.

否则重定向到账号密码登录页面.

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

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

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

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

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

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

后台读取 Referer 头部判断

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

如果从网站A首次访问网站B,从referer字段是分辨出来自网站A;

切换页面路径时此时referer字段是网站B本身;

如果是从空页面直接访问网站B,referer字段为空;

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值