非安全传输协议前提下,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);
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值