美文网首页
乾坤子系统开发体验优化--cookie获取

乾坤子系统开发体验优化--cookie获取

作者: 阿明先森 | 来源:发表于2021-12-20 14:16 被阅读0次

问题描述

  • 基于乾坤微前端方案开发的系统,分为主系统和子系统两部分,主系统包含系统管理、权限管理、子系统、注册登录、导航等模块。子系统主要是某个自成体系的功能模块。
  • 本地开发主系统会调起登录,登录接口返回set-cookie(出于安全考虑会使用httponly模式),写入到cookie中,对整个domain共享,后续的请求会写携带上cookie,用于后端鉴权。
  • 开发子系统的时候由于子系统不包含登录,所以接口请求就会返回未鉴权。
  • 此前的做法是,手动复制目标环境(代理接口的domain)的cookie到当前domain(即localhost)的cookie中,实现鉴权。
    这样做当然没有问题,就是对于开发者看来说每次这样复制一遍很是 有辱斯文, 毕竟写代码的初衷就是为了用技术替代重复的劳动不是?

实践思路

chrome插件

因为壳系统耦合了蛮重的业务逻辑,所以是想尽量在不动壳系统代码的前提下解决问题。最近看了一点关于chrome开发的例子,想着用chrome插件完全解耦业务代码,想想就觉得很棒。

最初的想法很简单,通过脚本获取到目标源的cookie,然后写入到本地,完美?
事实上很快就被打脸了,接口通过responents setCookie的cookie,通过document.cookie()是获取不到的!emoj?

那么,如果我在chrome插件中实现页面嵌入iframe,iframe里面加载本地domain,然后用脚本更新目标地址的js,页面刷新之后,这个cookike是不是就写入到了本地domain了呢?我tm真是个人才!

再次被打脸,chrome的iframe也不是白给的,如果这么容易就被你盗用了其它网站的cookie,那岂不是cookie的安全策略成了摆设?

  1. 问题一是我修改了js文件之后,控制台会报“<”错误,我想应该就是解析出错了吧;
  2. 其次就是全局的路由和vue实例已经挂在全局了,这个过程应该是不可逆的吧?
  3. 页面刷新也是问题,直接location.reload()触发更新,会重新加载本地文档(src地址:localhost),脚本加上去的内容会被清除掉。凉凉,看来这又是死胡同。

回到原点

看来cookie的安全策略是绕不开的一座山。

干不掉的对手,就想办法和它做朋友

从朋友那取了经,还是应该老老实实的把登录从壳系统里面抽离出来,最好抽成独立的模块,生产npm包,子系统安装成dev依赖,然后运行时判断是否处在乾坤环境,选择是否加载登录页面。

这里只讲思路,具体实现起来并不复杂。

完成

设计思路

  • 1、发送请求,返回当前登录状态
  • 2、注入路由,/login
  • 3、返回401:未认证--,跳转到login
  • 4、执行/login请求,刷新cookie
  • 5、登陆成功,跳转回默认页或退出页面

使用方式

发布到内网cnpm

  1. 安装依赖
npm i qiankun-login --save-dev
  1. 在main.js or main.ts 中引入
import loggedInCheck from 'qiankun-login';
  1. 非乾坤环境下 Vue 实例化之后
if (!window.__POWERED_BY_QIANKUN__) {
  const router = createVueRouter(routes);
  new Vue({
    router,
    store,
    render: h => h(App),
  }).$mount('#app');
  // router 是vue-router实例化之后的对象
  loggedInCheck(router);
}

router注入

vue-router api文档

const addRouter = router => {
    const injectedLogin = router.getRoutes().some(e => e.path === "/login");
    !injectedLogin && router.addRoute(route);
    return router;
};

TODO

  • 增加模板,包含壳系统的menu和顶部导航,皮肤切换等功能

相关文章

  • 乾坤子系统开发体验优化--cookie获取

    问题描述 基于乾坤微前端方案开发的系统,分为主系统和子系统两部分,主系统包含系统管理、权限管理、子系统、注册登录、...

  • Webpack优化

    0、写在前面 Webpack优化可以分为优化开发体验和优化输出质量两部分 1、优化开发体验 优化开发体验的目的是为...

  • 玩转服务端cookie

    获取服务端cookie 获取客户端cookie 客户端设置cookie 删除cookie cookie策略

  • 读写操作

    获取cookie 删除cookie 写入cookie

  • C#设置Cookie

    设置Cookie 获取Cookie 清除Cookie

  • Flask中cookie的使用

    设置cookie 获取cookie,和删除cookie

  • Js封装函数

    一、Cookie相关 1、获取cookie 2、写入cookie 3、删除cookie 二、URL相关 1、获取u...

  • cookie

    //设置cookie //获取cookie //封装cookie调用 以对象的形式获取 //key // 设置有效...

  • 获取返回URL

    Java设置Cookie Java获取Cookie Js获取Cookie Java方法调用 Js方法调用

  • SpringMVC 操作Cookie

    基于SpringMVC 框架下写的 开发时先用以下的代码将获取的cookie进行封装 服务器操作Cookie 注意...

网友评论

      本文标题:乾坤子系统开发体验优化--cookie获取

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