HTTP认证连接器

连接器简介

1. HTTP认证接口是什么

 

软件开发中面对的接口通常有2种:

  • HTTP
  • SOCKET

其中HTTP接口是绝大多数,少量自定义传输格式的SOCKET,通常用于对性能要求极高的场景,或是遗留的老系统。较新的API服务基本都是使用HTTP传输。

 

HTTP接口包括REST的含义,为了在概念上更广一些,我们在这里只说HTTP。互联网上的开放HTTP接口,从认证鉴权上分为两个大类:

    1.1 只需要调用一个URL即可的API。比如一些公司内部使用的url接口不需要签权,稍微严格一点的方式是在URL后面加上密钥。

以百度的【IP定位】接口为例,其地址是 http://wiki.lbsyun.baidu.com/index.php?title=webapi/ip-api  ,它的认证方式如下图:

可以看到认证是在url上加了个密钥串。当然这用的是get方式,如果用post也是一样的,只不过密钥传输的位置不一样。对于这样的接口, 我们可以用postman轻松测试。

 

   1.2 需要对提交内容做加密运算的API。这种方式只用一个url是不够的,因为通常需要加入时间戳进行加密,用postman就很难直接测试,而必须使用服务商的SDK。比如把输入字段按字典排序然后做md5,或是像阿里云那样根据复杂的算法算出一个sign来,我们来看下阿里云的签权加密算法:

 

是不是感觉比较复杂呢?这样的方式自己去拼密钥是很困难的,通常的做法是直接使用它的SDK。但使用SDK又带来新的问题:比如JDK版本、jar包冲突、过多的依赖引用等。

 

上面所说的第一种:只需要调用一个URL即可 的API,我们称其为【URL类型的API】,所有这个类型的API,都可以使用我们的【简单URl连接器】对其进行连接。

上面所说的第二种:需要对提交内容做加密运算 的API,我们称其为【HTTP认证类型的API】,所有这个类型的API,都可以使用我们的【HTTP认证连接器】对其进行连接。

 

2. 常规使用流程

我们使用加密签名API时,是下面的流程:

 

在使用加密签名的接口时,通常自己来拼加密串是非常不容易的事,一个空格,一个斜杠都可能造成签名无法通过。这样的情况下,使用API官方提供的SDK是最好的选择。

3. 面临的问题

  • SDK管理

    以java为例,有的API使用httpclient3,有的使用httpclient4,有的使用okhttp,还有很多apache的依赖包,很容易产生冲突。特别是稍老的项目使用jdk6版本,对SDK包的管理就是个灾难。

  • 权限管理

    在很多情况下,一个账号的密钥可以调用  A、B、C、D多个接口,如果开发者想精细管理,比如某个小组只能调用A,某个小组只能调用BC,这样的情况只能自己编码进行权限管理。

  • IP黑白名单

    哪些IP可以使用您的密钥调用接口,哪些IP不能调用?这个看似简单的功能,很多API服务商却没有提供。

  • 流量、并发控制

    假设一个密钥在多个开发组中共享,每个小组每天能使用多少次调用,并发又能到多少? 因为API服务商通常对密钥有个总流控,您也不希望某个小组代码有问题而把其他小组的业务全阻塞了。

  • 日志记录

    一个密钥在什么时候,什么IP调用了接口,出入参数分别是什么?对不起,目前绝大部份API服务商没有对此记录。当您对调用量有疑问而希望服务商和您对账时,由于日志的缺失,这将是一笔糊涂账。

  • 负载均衡

    比如您同时在用百度和高德的【IP地址查询】接口,由于两个服务的调用额度、并发限制可能不同,您可以在易源设置这两个节点的负载权重从而分流。

  • 映射输入输出字段

    比如您同时在用百度和高德的【IP地址查询】接口,它们的输入和输出字段是不一样的。您可以通过易源对这两个节点的输入和输出做字段映射、代码级转换,从而把它们的输入输出完全统一。

  • 容灾切换

    项目中同时在用ABC三个接口,A挂了就走B,B再挂了就走C。需要定期检测节点的恢复情况。

 

 

4.解决方案

对于上一小节提到的问题,解决如下:

  • 密钥字段管理。

  • 权限管理

     通过连接器创建接入点,设置私有用户调用权限控制可使用哪些后端数据。

 

 

  • IP黑白名单

 

  

 

  • 流量、并发控制

 

 

 

  • 日志记录

 

 

  • 负载均衡

 

  • 映射输入输出字段

 

 

如果单纯的字段映射不能应对复杂情况,我们还可以使用【嵌入代码】方式直接修改输入、输出内容。

 

 

  • 容灾切换

   某个节点熔断后,易源会根据权重或嵌入的代码,将请求数据转至正常的后端节点。

 

 

5. 性能问题

    如果在同一个局域网下进行压力测试,直连时程序做充分优化,易源中转比直连方式的多消耗时间<1ms。网站或APP的响应时间在100ms-1000ms之间是可以接受的,也就是易源增加的时间是整体流程的0.01至0.001的比率,几乎可以忽略不计。这点开销,就像开车从北京到西安有1000公里,中间因为修路多走了1公里,总共由1000到1001公里,多走这1公里对全局可以忽略不计。

 

 

6. 安全问题

  • 易源平台和您签定合作协议,易源保证关键信息加密存储,保证数据安全不泄露,保证无用户授权绝对不连接数据源。
  • 易源公布对外IP,您可以设置IP白名单。

对于简单URL连接器,易源的IP是:

121.41.60.109

120.26.59.160

120.26.61.225

129.211.129.137

 

 

 

 

 

连接器功能(使用场景)

案例1:使用阿里【中心词提取】接口

阿里接口地址为:

 

https://ai.aliyun.com/nlp/ke?spm=5176.11907134.1249450.5.4eba4705O0SdNK

打开后,显示界面是:

我们按照阿里提示进行资源包购买,在阿里后台获取AccessKeyID和AccessKeySecret 。

然后到易源配置数据源:

 

进入配置表单:

 

在配置后端服务节点时,我们按下图配置:

 

 

案例2:使用京东云自营接口

我们以【菜品识别】接口为例,其地址为: 

 

https://wx.jdcloud.com/market/api/10480

打开后,显示界面是:

 

我们按照京东云提示进行资源包购买,在阿里后台获取AccessKey和SecretKey 。

然后到易源配置数据源:

进入配置表单:

 

然后我们到易源平台创建接入点,在接入点中创建后端节点(可以建多个后端节点,这样可以负载均衡。当然也可以只建1个节点)。