要跟其他公司合作,为他们开放一个查询数据的接口,想用api来写,看了网上一些教程,都是些客户端方面的,登陆获取token等等。请问我这种直接跟别人对接的,还需要登录么,对方只是需要一个直接查询我某些数据的接口而已,一些验证该怎么弄合适呢,不想搞的太low,希望听听大家意见。以后接口还要开放给其他合作公司,提前谢谢大家。
现在比较常用的可能就是通过加密的方式来解决。给对方一个token 然后自己来程序中来验证token是否有效。
对于确保请求数据安全的话:在model中加一个sign 对方将请求数据md5 把md5的结果传过来。然后己方在接受到对方的数据后 将数据md5 对比两个md5是否一致。不一致则证明请求数据被篡改了
您的意思是他在请求我接口之前,先来获取一下token,然后每次请求都带上吗?这是一个后端操作,并不是针对客户端的接口。用客户端的设计方式,好使么。
他调用我接口,可能连续请求几百万次。
@一禅·小和尚: 这个token 可以设定时效的呀。 请求一次 多久之后时效。这个完全没问题的
@初夏的阳光丶: 申请一次之后,有效期2分钟,然后每次请求数据都会重新更新他的有效期是么
@一禅·小和尚: 不需要重新更新的。 token这个里面的信息是你自己定义的。 你隔一段时间检查一下token就好 (好比说把时间放进去 对比时间)
@初夏的阳光丶: 那有效2分钟的话,对方就要每两分钟,重新请求一次token了。
@一禅·小和尚: 对的。这样相对来说安全一点
@初夏的阳光丶: 好的,多谢多谢,请问您是采用哪种加密解密的呢
@一禅·小和尚: DES 因为需要一个key 可以用来区分一些信息
@初夏的阳光丶: 你好,请问时间戳这个参数,是服务器返回给用户的吗?用户再次请求时,只需要原封不动的带上就OK吧
@一禅·小和尚: 是的
按照我的思路是这样认为的:
1、根据令牌(指定公司名称或其他)申请密钥(Token),服务器判断是否满足条件下发密钥(Token),同时服务器记录密钥(Token)有效期(时间戳);
2、查询数据:根据指定密钥(Token)+有效期(时间戳)+请求接口查询数据。
如果后续需要开发给其他公司,只需在谈合作的时候用户提供一个身份令牌即可(可以是公司名称或者其他,PS:身份令牌需要存库,用于判断是否为合作公司)
我就是这样做的,令牌/票据(bill)+申请密钥(Token)+时间戳进行的,感觉蛮好的
请问申请秘钥这一步,怎么完成呢?对方在每次请求数据之前,先获取一下秘钥吗,然后我为秘钥设置个有效期吗?
假如有效期1小时,而对方循环获取数据,超出一小时怎么办,我并不知道他会获取多久,我有一亿数据。。
@一禅·小和尚: 提示用户啊,密钥有效期1小时,在1小时有效期内重复申请无效啊,或者一小时只能申请2-3次,超过一小时密钥失效,失效后重新申请就行了。
如果你又几亿数据,你首先判断查询一次需要多长时间,根据这个时间设置有效期,很过平台的密钥有效期都是7天。这个可以参照一下。
@一禅·小和尚: 然后每天一个客户你定义可以申请几次,超过你定义的次数就定义为恶意申请,然后返回状态提示【您今日密钥申请次数已到达上限】之类的不久好了
可以参考大厂 微信公众号开放平台、微信支付、支付宝支付怎么做
看重要性,如果是很关键的数据,又是外网,考虑要验证。
如果本来就是查询公开数据,不用也无防。
数据很重要,而且是外网。我是定向给某个公司开放这个接口。
-H "Client-Id: {your Client ID}"
-H "Authorization: Bearer {your Token}"
系统建一个表, 放着客人编号,客人查询的token码, 接口添加这二个参数验证, 如果正确的就返回相应的json给他们