1
kop1989 2020-11-10 10:03:56 +08:00
无论如何,这个需求都需要对方配合。
对方如果能配合那就好说了,直接 url 传参即可,双方约定一个规则。 |
2
belin520 2020-11-10 10:06:38 +08:00
SSO 单点登录
用 A 系统的授权凭证换取 B 系统的授权 |
3
belin520 2020-11-10 10:08:56 +08:00
设计思路很简单:A 系统生成一串加密的、能证明是某个用户的字符串给 B 系统,B 系统拿到字符串之后,调用 A 系统的接口,解密出这个用户是谁,然后免登录进入到 B 系统即可
|
4
qiayue 2020-11-10 10:19:39 +08:00 3
假设你的 h5 的 url 是 h5.ztlong.com/form
最简单做法,对方 APP 当前登录用户 id 假设是 1001,那么直接 url 传参给你: h5.ztlong.com/form?uid=1001 但是假如你需要嵌入到多个应用里,上面一个参数就无法区分到底是哪个应用的用户,所以改进一下,增加 appid: h5.ztlong.com/form?appid=101&uid=1001 然后你会发现有安全性问题,我只要知道别人的 appid 和用户 id,就可以伪造身份,所以需要加入签名: h5.ztlong.com/form?appid=101&uid=1001&sign=xxxxxx 签名根据 appid 和每个应用不一样的 appkey 和用户 id 根据某种算法计算出来 但是依然会有问题,如果链接被我复制分享出去了,外人可以用这个网址伪造我,所以签名还需要加上时间戳 h5.ztlong.com/form?appid=101&uid=1001&sign=xxxxxx&time=当前时间戳 你用参数中的 time 和当前时间比较,在正负一定时间范围内允许访问 |
5
qiayue 2020-11-10 10:22:28 +08:00
上面是用签名的方式,你用同样的签名计算方法计算,如果签名一致,就说明请求没问题。
但是依然还可以更进一步,就怕对方计算签名是在前端计算的,容易被人反编译得到 appkey,那么你还可以让对方提供一个接口,你拿签名和时间去调用对方接口,检验签名是否是对方生成的 |