本文考虑:在不使用安全传输协议的前提下,Open API调用的安全问题。
作者:刘海龙
微博:[http://weibo.com/liuhailong2008]
博客:[http://blog.csdn.net/stationxp]
_seed
。_seed
用自己的私钥签名,得到_sign
,提供给发布者认证身份。_seed
用发布者的公钥加密,得到_key
。_seed
对消息_msg
对称加密,得到密文_msgx
。_sign``_key``_msgx
拼接,进行Base64压缩(可选),得到_body
。_body
,执行API调用。_body
,拆分为_sign
、_key
、_msgx
。uri
到注册库中找到调用者公钥_invkerpk
。_invkerpk
解密_sign
,得到_seed1
。_key
,得到_seed2
。_seed1
和_seed2
,如果一致,确认得到_seed
;否则处理过程结束。_seed
对_msgx
解密,得到明文消息。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);
}
原文地址:http://blog.csdn.net/stationxp/article/details/43758301