- D. URL 规范
- 内网服务遵循的 URL 格式为 http://<host>:<port>/<context>/path/to/your/api,应用上下文根紧跟在 <host>:<port> 之后,以便统一获取来找到配置 。比如:http://172.0.8.177:8080/user/users/{uid}/info,其中 user 为应用上下文根,紧跟在 172.0.8.177:8080 之后 。
- E. 样例
- 内网用户信息服务由原来的 API:/user/users/{uid}/info 提供,后来迁移至 API:/user/users/{uid}/user-info,当第三方 CampA (IP 为 172.0.1.172) 发起 GET 请求时,请求 URL 为 http://openapi.company.com/user/users/27/info?thirdparty=CampA&cp=fj375x...sign=abxuos8nb... 。
- 初始化常量和依赖等
- 通过 CampA 与 user Context 获取第三方配置
- HAProxy Internet 接收请求发到 OpenApi 接口网关,OpenApi 把 /user/users/27/info URI 重写为 /user/users/27/user-info/
- 校验第三方请求 IP,在 IP 白名单中,校验通过;校验 URI /user/users/27/user-info 在授权的 URI 中,校验通过
- 调用安全服务对请求进行解密与验签,解密成功,验签通过,获取明文
- 将拥有明文的请求转发到开放接口服务
- 获取响应,调用安全服务对响应报文进行签名与加密,返回给第三方 CampA 。
- 3.2.2.2 配置服务设计
文章插图
- A. 数据库表设计
- openapi_thirdparty_config
文章插图
- openapi_api_config
文章插图
- openapi_api_mapping
文章插图
- B. 配置服务接口响应
- 3.2.2.3 安全服务设计
- 为了保证请求或响应的完整性、以及请求或响应来源的合法性,双方传输需要进行签名;另外,由于可能开放接口的请求或响应会包含敏感信息,需要进行加密传输 。这里的安全服务就是指请求的解密与验签和响应的签名与加密服务 。
文章插图
- A. 算法约定
- 对称加密算法:3DES(DESede/ECB/PKCS5Padding)
- 非对称加密算法:RSA(RSA/ECB/PKCS1Padding)
- 签名算法:SHA1WithRSA
- B. 公钥约定
- 双方预先交换 RSA 公钥
- 双方公钥编码方式:UTF-8 编码的 Base64String
- 双方进行加解密与验签名可使用同一把 RSA 公私钥或者分别使用各自的公私钥,双方约定即可
- C. 第三方请求流程示意
文章插图
- 其中,添加统一参数为必选步骤,请求签名、请求加密、响应解密、以及响应验签都是可选步骤 。
- 无论是 GET、POST 或者其他方式的请求,第三方在访问平台开放接口前,都需要添加统一参数到 request parameter 中
- 统一参数包括第三方应用名、请求时间戳、随机不重复字符串 nonce 等
- 验签名属于应用维度 —— 针对应用做验签名(比如:按照约定需要对第三方应用 A 进行验签,则应用 A 访问数禾任何接口都需要签名)
- 加解密属于接口维度 —— 针对接口做加解密(比如:同一个第三方访问 A 接口需要加密,而访问 B 接口可以不需加密)
- D. 加解密示意(以第三方请求为例)
文章插图
- E. 验签名示意(以第三方请求为例)
文章插图
- 3.2.3 架构总结
- 由于 Nginx 与 Lua 本身杰出的性能,在当前的系统量级与整体 IT 架构下,我们使用这样的接口网关架构已经可以支撑较大的并发请求 。在最后的这一节,我们不妨回顾一下前文讲述的接口网关架构,看看目前性能上仍存在着的两个主要待改进的地方 。
推荐阅读
- 梁山武力排名前二十 卢俊义在梁山的排名
- 梦到自己的车撞坏了是什么预兆 梦见自己的车头撞坏了
- 世界上最残酷的监狱 世界上最豪华监狱牢房
- 网站被黑的常见的方式有哪些?网站被黑应对处理办法分享
- 梦见锅里煮着饺子 梦见煮好的饺子成在碗里好不好
- 假紫砂大师的虚假
- 爱喝红茶的茶人 应该知道的红茶常识
- 紫砂艺术品市场的发展现状
- 全网最实用的Debug调试技巧汇总
- 紫砂茶具的四美简介