将 h5 内嵌到别人的应用如何实现静默授权

2020-11-10 10:01:27 +08:00
 ztlong
背景是开发了一个工单应用,希望能够内嵌到一个已有的系统中,需要能够实现静默授权,在现有的系统登录后,直接访问表单页面,即可对已提交的表单进行处理,这种一般如何实现。
2761 次点击
所在节点    HTML
5 条回复
kop1989
2020-11-10 10:03:56 +08:00
无论如何,这个需求都需要对方配合。
对方如果能配合那就好说了,直接 url 传参即可,双方约定一个规则。
belin520
2020-11-10 10:06:38 +08:00
SSO 单点登录
用 A 系统的授权凭证换取 B 系统的授权
belin520
2020-11-10 10:08:56 +08:00
设计思路很简单:A 系统生成一串加密的、能证明是某个用户的字符串给 B 系统,B 系统拿到字符串之后,调用 A 系统的接口,解密出这个用户是谁,然后免登录进入到 B 系统即可
qiayue
2020-11-10 10:19:39 +08:00
假设你的 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 和当前时间比较,在正负一定时间范围内允许访问
qiayue
2020-11-10 10:22:28 +08:00
上面是用签名的方式,你用同样的签名计算方法计算,如果签名一致,就说明请求没问题。

但是依然还可以更进一步,就怕对方计算签名是在前端计算的,容易被人反编译得到 appkey,那么你还可以让对方提供一个接口,你拿签名和时间去调用对方接口,检验签名是否是对方生成的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/723462

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX