非安全传输协议前提下,Open API安全协议设计

本文考虑:在不使用安全传输协议的前提下,Open API调用的安全问题。

    • 角色定义
    • 处理流程
      • 调用方消息发送流程
      • 发布者消息接收流程
      • 调用结果返回流程
    • 代码设计
      • 调用方代码设计
      • 发布者代码设计

作者:刘海龙

微博:[http://weibo.com/liuhailong2008]

博客:[http://blog.csdn.net/stationxp]

角色定义

  • 发布者:Open API的发布者。
  • 调用方:Open API的调用者。

处理流程

调用方消息发送流程

  1. 生成一个UUID,称为_seed
  2. _seed用自己的私钥签名,得到_sign,提供给发布者认证身份。
  3. _seed用发布者的公钥加密,得到_key
  4. 使用_seed对消息_msg对称加密,得到密文_msgx
  5. _sign``_key``_msgx拼接,进行Base64压缩(可选),得到_body
  6. 发送_body,执行API调用。

发布者消息接收流程

  1. 得到_body,拆分为_sign_key_msgx
  2. 通过调用着uri到注册库中找到调用者公钥_invkerpk
  3. 使用_invkerpk解密_sign,得到_seed1
  4. 使用自己对私钥揭秘_key,得到_seed2
  5. 比对_seed1_seed2,如果一致,确认得到_seed;否则处理过程结束。
  6. 使用_seed_msgx解密,得到明文消息。

调用结果返回流程

  1. 返回结果为预先设定的消息代码。
  2. 采用安全方式传输,则使用调用者的公钥加密。

代码设计

调用方代码设计

interface Invoker{
    void setEndPoint(InvokerEndPoint endPoint);
    /**
    * 通过调用EndPoint实现。
    */
    Response get(String api,Object…params);
    Response post(String api,Object…params);
 }
 interface InvokerEndPoint{
    Response invoke(Request request);
 }
 /** 装饰模式 */
 interface SecurityInvokerEndPoint{
    Response invoke(Request request);
 }

发布者代码设计

 interface OpenApiFilter{
    void setEndPoint(ExportEndPoint endPoint);
    /**
    * 通过调用EndPoint实现。
    */
    HttpServletResponse process(HttpServletRequest request);
 }
 interface ExportEndPoint{
    Response export(Request request);
 }
 /** 装饰模式 */
 interface SecurityExportEndPoint{
    Response export(Request request);
 }
 interface ExportHandler{
    Response handle(Object...args);
 }
时间: 2024-10-04 23:13:58

非安全传输协议前提下,Open API安全协议设计的相关文章

HTTP协议浅析(下): 使用HTTP协议实现通信

1. 概述 服务器的开发不容易,尤其是开发高性能.稳定性好服务器,更加不容易,因此人们尝试更好简单的方式来开发软件. 在服务器方面,使用Web服务器,采用HTTP协议来代替底层的socket,是常见的选择.采用HTTP协议更加除了能得到稳定的服务器支持外,更加可以兼容各种客户端(手机.PC.浏览器)等等.这样实现了一个服务器之后,多个客户端可以通用. 2.通信过程 HTTP 协议采用请求/响应模型.客户端向服务器发送一个请求报文,服务器以一个状态作为响应. HTTP 请求/响应的步骤: 客户端连

架构设计:系统间通信(20)——MQ:消息协议(下)

(接上文<架构设计:系统间通信(19)--MQ:消息协议(上)>) 上篇文章中我们重点讨论了"协议"的重要性,并为各位读者介绍了Stomp协议和XMPP协议.这两种协议是消息队列中两种不同使用场景下的典型代表.本文主要接续上文的篇幅,继续讨论消息队列中另一种典型协议:AMQP协议. 3-3.AMQP协议 AMQP协议的全称是:Advanced Message Queuing Protocol(高级消息队列协议).目前AMQP协议的版本为 Version 1.0,这个协议标准

基于dubbo框架下的RPC通讯协议性能测试

一.前言 Dubbo RPC服务框架支持丰富的传输协议.序列化方式等通讯相关的配置和扩展.dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC请求,注册中心分配服务URL并路由到具体服务提供方(Provider),消费者和服务提供方建立网络连接,服务提供方在本地创建连接池对象并提供远程服务,对于长连接类型协议(如dubbo协议)将保持连接,减少握手认证,调用过程中可以避免频繁建立和断开连接导致的性能开销,保持长连接需要有心跳包的发送,所以

基于dubbo框架下的RPC通讯协议性能测试 转

一.前言 Dubbo RPC服务框架支持丰富的传输协议.序列化方式等通讯相关的配置和扩展.dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC请求,注册中心分配服务URL并路由到具体服务提供方(Provider),消费者和服务提供方建立网络连接,服务提供方在本地创建连接池对象并提供远程服务,对于长连接类型协议(如dubbo协议)将保持连接,减少握手认证,调用过程中可以避免频繁建立和断开连接导致的性能开销,保持长连接需要有心跳包的发送,所以

【执行力决定命】第4集《有价值的额外贡献,要建立在做好本职前提下》

「音频原文」http://dwz.cn/6sAOCC 大家好,我是林琳笨,今天一起分享<有价值的额外贡献,要建立在做好本职前提下> 先引用一个华为内部的故事: 华为有个新员工,入职没几天,做了几十页的发展战略书,打算交给任正非任总,他想就算做的不好,任总也能鼓励我一下,没想到任总直接把方案扔垃圾桶,批评说:不要想着做惊且动地变革,先从小事做起,老实把自己任务完成. 记得前几年,安排一位同事做我临时助理陪我去深圳出差,事前说好他主要负责5个深圳合作方确定约见时间.地点.记录和后续跟进.当天晚上抵

第8章 传输层(1)_TCP/UDP协议的应用场景

1. 传输层的两个协议 1.1 TCP和UDP协议的应用场景 (1)TCP协议:如果要传输的内容比较多,需要将发送的内容分成多个数据包发送.这就要求在传输层用TCP协议,在发送方和接收方建立连接,实现可靠传输.流量控制和拥塞避免.(如下载500M电影.QQ好友传输文件.浏览网页.发送电子邮件等) (2)UDP协议:一个数据包就能发送全部内容,不需要持续发送,发送方和接收方不需要建立连接.由于就一个数据包不需要流量控制和拥塞避免,在传输层不需要负责可靠传输.如果数据包发送出去,应用程序没有收到返回

在弱网传输的情况下,是怎么做到节约流量的(面试小问题,Android篇)

马上毕业了,在毕业之际,我辞掉了以前的实习工作,主要是工作内容不太感兴趣.最近在找工作,主要是找Java和Android方面的工作.自以为学得不错,但是面试屡屡受挫.先提一下问到的一些问题吧. 第一个:在弱网传输的情况下,是怎么做到节约流量的? 由于Android接触的确实不多,这个问题自然没有很愉快的答上来. 我这样回答的:将一些数据进行压缩,例如传一个字符串,先将字符串转换成字符数组的形式,然后对这个字符数组进行压缩.然后就是对很多传输对象(一般都是JSON,XML这种方式太笨重了),提取公

Unity3d热更新全书-加载(二)如何在不用AssetBundle的前提下动态加载预设

Unity3D的主要构成大家都知道,首先是场景图,场景图上的节点构成一颗树. 每个节点对应一个GameObject对象 然后每个GameObject有若干个组件 有一些组件会与资源产生关系,比如MeshRenderer会关联材质,材质会关联shader和贴图 场景图的一部分可以被保存为一个预设,prefab. 有时候我们会需要用预设去复用,而预设的加载似乎只能通过AB去打包,其实不然,这里我们有一个开源的库就可以解决这个问题. 为什么不使用AB,可以见上一篇,加载(一),不使用AB一份资源全平台

ACdream 1135(MST-最小生成树边上2个值,维护第一个最小的前提下让另一个最小)

F - MST Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description Given a connected, undirected graph, a spanning tree of that graph is a subgraph that is a tree and connects all the vertices to