V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dream4ever
V2EX  ›  前端开发

开放给合作方的网站,如何验证用户身份?

  •  
  •   dream4ever · 2020-09-27 15:34:58 +08:00 · 1075 次点击
    这是一个创建于 1552 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们公司目前在和另一家公司合作开展业务,对方做的是在线学习平台,我方做的是在线电子书,现在不知道怎样和对方进行对接,所以来这里咨询一下。

    目前规划的整体流程是这样:

    1. 对方平台用户在其平台上成功付费购买电子书之后,平台才会给用户显示我方网站上的电子书链接。
    2. 对方平台用户点击电子书链接,跳转到我方网站上。我方网站验证来源用户是否为对方平台用户,以及是否已购买所要阅读的电子书。
    3. 如果来源用户的确为对方平台用户,且已购买所要阅读的电子书,则向其展示电子书内容。
    4. 如果来源用户的确为对方平台用户,但没有购买所要阅读的电子书,则将该用户重定向至对方平台课程页面,课程页面上会有购买电子书的提示信息。
    5. 如果来源用户不是对方平台用户,那就说明是非法请求,直接丢掉。

    其中需要说明的是,对方平台上每个用户的信息,包括其所购买的电子书,都由对方平台记录。

    按这个流程来实施的话,我方网站要验证来源用户,具体的技术细节应该是怎样的?

    我之前构思的一种方案,是对方在向我方网站跳转的 URL 中附带用户 ID 、图书编号及 JWT 。其中 JWT 由“用户 ID + 图书编号 + 用户 IP”生成。

    然后我方网站调用对方的用户验证接口,将用户 ID 、图书编号、用户 IP 及 JWT 回传,由对方验证“用户 ID + 图书编号 + 用户 IP”的组合是否能够生成同样的 JWT,并验证该用户是否在其平台上购买了该图书。

    但是这种方案将 JWT 在 URL 中明文传输,安全性是否欠妥?可是 GET 请求又不像 POST 请求那样能在 body 中附加信息,所以很是头疼。

    最后,这种方案不合适的话,采用什么样的方案更合适?还望大家不吝赐教,谢谢先。

    4 条回复    2020-09-29 14:54:44 +08:00
    XiLingHost
        1
    XiLingHost  
       2020-09-27 17:34:12 +08:00   ❤️ 1
    oauth 进行对接用户不就好了,两边都维护一个用户系统,然后通过 oauth 来新建并关联用户,之后通过其他接口判断该用户是否实际拥有对应的书籍,传入的时候带 cookies
    另外,就算按照你这个请求里带 jwt 的策略,只要是 https 的链接,就没有问题,传输层之内看到 sni 和 ip,看不到具体的链接信息的
    dream4ever
        2
    dream4ever  
    OP
       2020-09-28 09:41:25 +08:00
    @XiLingHost OAuth 的方案我也考虑过,当时觉得有些麻烦,就没考虑。

    另外对方平台对应的域名没有部署 https,运行好些年了,用户体量也不小,我也是有点诧异。
    XiLingHost
        3
    XiLingHost  
       2020-09-29 09:29:01 +08:00
    @dream4ever 没部署 https ?这也太离谱了吧,商业网站居然不上 ssl,这个就算是搞个 lets encrypt 的也好啊
    dream4ever
        4
    dream4ever  
    OP
       2020-09-29 14:54:44 +08:00
    @XiLingHost 据说每年都有数十万用户使用他们的平台呢,我也很纳闷为什么会做成这样。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1109 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:54 · PVG 02:54 · LAX 10:54 · JFK 13:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.