概要说明:
通过CodeWave平台所开发的制品,如何实现主应用登录后免登跳转到制品,本文档介绍了三种解决方案
三种方案对比:
方案一:子应用自己管理token
注意:该方案主应用和子应用的token没有做到实时同步,子应用自身无法感知到主应用是否退出登录,如果想要共享登录状态,可以了解方案二
1、时序图:
这里包含登录访问和未登录访问,这里根据业务自行选择,也可以两种结合
-
父应用未登录,直接访问制品子应用
-
父应用已登录,点击子应用链接
2、接入步骤:
a. 子应用(制品)定义callback页面:用于接受主应用的的token和redirect_url
b. 子应用收到回调后在服务端通过token去换取用户信息
c. 拿到用户信息调用lcap_auth依赖库的createToken从而创建制品内部token,便于之后的认证使用
d. 创建token成功后跳转到redirect_url页面
3、注意事项:
-
主应用需要暴露获取用户信息api,供子应用去调用
-
上述接入方式存在一定的安全问题,开发者可以提前将制品子应用id注册到父应用当中,子应用每次获取用户信息可以将应用id和token传过去,父应用则去校验appid。但是这需要开发者去修改自身的应用,可以根据自身业务灵活使用
方案二:token由父应用统一管理
注意:该方案虽然父子应用可以共享登录状态,但是子应用每次请求都需要请求父应用的接口,这会造成一部分的性能损耗
1、时序图:
这里包含登录访问和未登录访问,这里根据业务自行选择,也可以两种结合
-
父应用未登录,直接访问制品子应用
-
父应用已登录,点击子应用链接
2、接入步骤
a、定义callback页面:用于接受主应用的的token和redirect_url
b、收到回调后需要把token存在cookie中
c、创建cookie成功后跳转到redirect_url页面
d、需要复写lcap_auth依赖库中的getUser,从cookie中拿到token后去调用父应用开放的获取用户信息的接口
3、注意事项:
a、主应用需要暴露获取用户信息api,供子应用去调用
b、上述接入方式存在一定的安全问题,开发者可以提前将制品子应用id注册到父应用当中,子应用每次获取用户信息可以将应用id和token传过去,父应用则去校验appid。但是这需要开发者去修改自身的应用,可以根据自身业务灵活使用
方案三:通过代理的形式共享cookie
1、这里以nginx举例:
通过nginx代理将主应用的cookie转发的子应用的请求中,这样子应用每次请求都携带主应用的cookie,子应用通过cookie请求主应用则可以获得用户信息
2、时序图:
3、代理配置
4、注意事项
a、子应用中需要重写lcap_auth依赖库下的getUser方法,且内容是通过cookie调父应用中的获取用户信息的接口
b、这里基本上和场景二类似,只不过不需要手动去存储token
c、本文档是用的nginx实现代理,在实际业务中开发者也可以选择其它的代理方式
更多内容分享与交流,微信公众号关注【网易数帆CodeWave】公众号~