1
本文对单点登录有一个初步介绍,重点叙述前端开发者使用单点登录可能遇到的问题,以及问题分析!
方案全部来源于用友建筑云,本文仅用于内部分享,所以不过多介绍方案实现。
原文来自博客

单点登录介绍

单点登录

  • APP在打开应用时用当前登录用户身份向MA申请一个令牌token
  • MA判断权限并返回令牌
  • Web使用token和appid去移动平台进行验证,验证是否合法
  • MA验证Token,如果合法则返回第三方移动应用对应的用户信息

容易出现的问题

容易出现的问题

  • 1.用户想要的应用没有显示在应用列表中?

要确认:上架、授权;
区分应用分类:应用中心,内置应用,静态资源;
区分获取应用列表接口的多个接口。
后期值得考虑本地排序和后端排序,以及最近访问记录等拓展应用中心能力。

  • 2.调用交互方法时没反应没报错?

yyplus:call undefined?检查yyplus引用路径,以及yyplus 入口js中的maurl定义路径是否正确。

  • 3.用户点击应用时提示无权限?

原生调用validata接口时auth参数为需要鉴权,所以需要在应用管理中给应用授权。
因为迁移,这其中的授权会不会影响也是有可能的。

  • 4.应用鉴权出错,以及返回信息错误?

同上

  • 5.Url不正确,参数获取失败?

IOS容易出现url不对,已经解决过,但是老的版本APP代码同步情况不明,url不对会导致getRequest方法出现混乱,在url中传参就会导致错误参数,错误数据。
客户或者其他开发组的getRequest方法是否正确对于帮助其他人和我们联调也是值得注意的地方

  • 6.校验失败?

一般不容易出现校验失败,出现原因,现在极大可能就是APP迁移和应用迁移不同步。

  • 7.返回信息取不到用户组织人员造成页面空白?

页面空白无报错,很有可能是前端组装ext时没有取到相应信息return false了。
另一个极大可能就是yyplus没有执行加载完毕调用了getCompany方法。

进阶说明

先来一个看图说话(test单个样例)
这里写图片描述
这里写图片描述
这里写图片描述

  • index.js加载时间几乎在3000ms
  • getWorkbenchCookie在100-200ms
  • yyplus安卓版下载资源异步还需要1000ms
  • checktoken需要1500ms

内部应用如何跳过验证阶段,加速打开应用(优化一秒)

内部应用是否可以跳过生成token阶段,加速打开应用(无数据至少也是1-2秒)

  • 方案一:正常情况下(应用中心入口,内置应用员工自助,openWebview)不进行鉴权以及validata验证;流程图简化为原生openwebview》》原生注入cookie》》轻应用通过cookie获取上下文(不需要调用getCompany方法)

可能出现的问题:

  • 轻应用单点登录日志如何记录?
  • cookie对于内部应用是否足够安全?

优化后流程图:
优化后流程图
需要改造的点:

    • 原生
    1. 打开webview时需要判断单点登录类型,根据单点登录类型做不同操作
    2. 写入的cookie改为icop_context(由登录是得到,之后缓存到全局,不重新登录该值不变)
    • web
    1. 修改authtoken

      • java
    2. 应用管理区分单点登录类型(token令牌,cookie,直接登录,用户密码)
    3. 添加单独鉴权接口,添加根据appid获取APP信息的接口,原有的validata存储的token不变,由于第三方使用依然需要存储在数据库,checktoken时依然需要在数据库中校验
    4. 微信单点登录与友空间单点登录(新加一个方法)改造成返回icop_context

    交互插件内置的可行性(优化一秒)

    交互插件内置方案一:探索Cordova前端使用,固定文件,开发社区一定提供了内置方案;
    方案二:走已知方案,直接将源码打包进入原生;

    webpack打包的优化(优化2秒)

    生产环境去除source-map;
    加入懒加载;常用的有 webpack 插件 bundle-loaderreact 自带的 react-loadable 决定使用bundle-loader
    经过第一步发现性能的根源在于yylib-antd-mobile没有按需加载,导致js有2M,继续根据组件库的性能按需加载


    whhlu
    470 声望36 粉丝

    夕阳下奔跑的前端小白!