ztlong
V2EX  ›  HTML

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

  •  
  •   ztlong · Nov 10, 2020 · 3843 views
    This topic created in 2037 days ago, the information mentioned may be changed or developed.
    背景是开发了一个工单应用,希望能够内嵌到一个已有的系统中,需要能够实现静默授权,在现有的系统登录后,直接访问表单页面,即可对已提交的表单进行处理,这种一般如何实现。
    5 replies    2020-11-10 10:22:28 +08:00
    kop1989
        1
    kop1989  
       Nov 10, 2020
    无论如何,这个需求都需要对方配合。
    对方如果能配合那就好说了,直接 url 传参即可,双方约定一个规则。
    icanfork
        2
    icanfork  
       Nov 10, 2020
    SSO 单点登录
    用 A 系统的授权凭证换取 B 系统的授权
    icanfork
        3
    icanfork  
       Nov 10, 2020
    设计思路很简单:A 系统生成一串加密的、能证明是某个用户的字符串给 B 系统,B 系统拿到字符串之后,调用 A 系统的接口,解密出这个用户是谁,然后免登录进入到 B 系统即可
    qiayue
        4
    qiayue  
    PRO
       Nov 10, 2020   ❤️ 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  
    PRO
       Nov 10, 2020
    上面是用签名的方式,你用同样的签名计算方法计算,如果签名一致,就说明请求没问题。

    但是依然还可以更进一步,就怕对方计算签名是在前端计算的,容易被人反编译得到 appkey,那么你还可以让对方提供一个接口,你拿签名和时间去调用对方接口,检验签名是否是对方生成的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5365 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 08:36 · PVG 16:36 · LAX 01:36 · JFK 04:36
    ♥ Do have faith in what you're doing.