V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Dive into HTML5
http://diveintohtml5.org/
ztlong
V2EX  ›  HTML

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

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

    但是依然还可以更进一步,就怕对方计算签名是在前端计算的,容易被人反编译得到 appkey,那么你还可以让对方提供一个接口,你拿签名和时间去调用对方接口,检验签名是否是对方生成的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5340 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:25 · PVG 17:25 · LAX 01:25 · JFK 04:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.