我们公司目前在和另一家公司合作开展业务,对方做的是在线学习平台,我方做的是在线电子书,现在不知道怎样和对方进行对接,所以来这里咨询一下。
目前规划的整体流程是这样:
- 对方平台用户在其平台上成功付费购买电子书之后,平台才会给用户显示我方网站上的电子书链接。
- 对方平台用户点击电子书链接,跳转到我方网站上。我方网站验证来源用户是否为对方平台用户,以及是否已购买所要阅读的电子书。
- 如果来源用户的确为对方平台用户,且已购买所要阅读的电子书,则向其展示电子书内容。
- 如果来源用户的确为对方平台用户,但没有购买所要阅读的电子书,则将该用户重定向至对方平台课程页面,课程页面上会有购买电子书的提示信息。
- 如果来源用户不是对方平台用户,那就说明是非法请求,直接丢掉。
其中需要说明的是,对方平台上每个用户的信息,包括其所购买的电子书,都由对方平台记录。
按这个流程来实施的话,我方网站要验证来源用户,具体的技术细节应该是怎样的?
我之前构思的一种方案,是对方在向我方网站跳转的 URL 中附带用户ID、图书编号及JWT。其中 JWT 由“用户ID + 图书编号 + 用户IP”生成。
然后我方网站调用对方的用户验证接口,将用户ID、图书编号、用户IP及JWT回传,由对方验证“用户ID + 图书编号 + 用户IP”的组合是否能够生成同样的 JWT,并验证该用户是否在其平台上购买了该图书。
但是这种方案将 JWT 在 URL 中明文传输,安全性是否欠妥?可是 GET 请求又不像 POST 请求那样能在 body 中附加信息,所以很是头疼。
最后,这种方案不合适的话,采用什么样的方案更合适?还望大家不吝赐教,谢谢先。
那你们可以简化逻辑,你们就假设自己是一个纯粹的电子书内容提供商,给认证的机构组织提供电子书内容在线浏览服务,只需要一个api即可完成业务流程。
AppID: 发放给认证可信的第三方的凭证ID(如果只有对方一家,可以直接忽略,不过为了迷惑潜在威胁,你还是加上一个哈哈哈哈)
AppSercet:发给认证可信的第三方的App秘钥(对方仅保存在服务器端不对外传输)
UserID: 双方协调的统一ID形式(可以公开的用户ID编号形式)
BookID: 你方提供的图书编号
Nonce: 随机数
Signature: 上述参数+AppSercet,经过加密算法得到的签名值
你们仅记录用户ID对应用户是否购买,何时购买和其他你们协商需要你们保存的数据,请求时判断是否购买即可,购买图书的可以通过另外加一个第三方订购在线电子书服务的api来做。
如果你们是完全信任他们的,或者直接签约按时间不计量(买断指定书籍,不限制对方售卖次数),可以不自己存用户订单数据,只检查图书ID是否是该第三方的授权范围内的即可
大致是这样,具体还得看合作协议怎么考虑的,授权书籍范围、授权方式、计费方式,次数限制