美文网首页Api设计
API接口安全性验证方案设计

API接口安全性验证方案设计

作者: FX_SKY | 来源:发表于2017-06-01 17:46 被阅读140次

    Http协议是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的。但是对我们的应用而言,它是需要有状态管理的,以便服务端能够准确的知道Http请求是哪个用户发起的,从而判断他是否有权限继续这个请求。这个过程就是常说的会话管理。

    本文总结了3种常见的实现web应用会话管理的方式:

    1. 基于session
    2. 基于公钥/私钥
    3. 基于token

    一、基于Session

    Session就不用多说了,至于分布式Session实现方案 Java中通过Spring Session可以很方便的实现分布式Session管理。

    二、基于公钥/私钥

    事先给客户端分配一个app_id和app_secret,客户端调用接口的时候将业务参数按字母排序,首尾加app_secret再RSA2(推荐使用SHA256,MD5和SHA1已被攻破)生成前面sign,然后再将业务参数和sign发送给服务器,服务器端用相同的方式生成sign,如果sign相等则路由到业务方法,否则返回鉴权失败。

    示例代码如下:

        private static final String UTF_8 = "UTF-8";
    
        public static String encode(Map<String, String> param, String secret, boolean encode) {
            Set<String> keysSet = param.keySet();
            Object[] keys = keysSet.toArray();
            Arrays.sort(keys);  //按参数名字典顺序排序
    
            StringBuilder sb = new StringBuilder(1024);
            for(int i=0; i<keys.length; i++) {
                if(i!=0){
                    sb.append("&");
                }
                sb.append(keys[i]).append("=");
                String value = param.get(keys[i]);
                String valueString = "";
                if (null != value) {
                    valueString = value;
                }
                if (encode) {
                    sb.append(urlEncode(valueString));
                } else {
                    sb.append(valueString);
                }
            }
            sb.append(secret);
            return DigestUtils.sha256Hex(sb.toString());
        }
    
        private static String urlEncode(String str) {
            try {
                return URLEncoder.encode(str, UTF_8);
            } catch (UnsupportedEncodingException e) {
                throw new IllegalArgumentException("unsupported encoding:"+UTF_8, e);
            }
        }
    

    三、基于token

    服务端动态生成token,客户端调用的时候需要回传token,参考 微信公共平台 access_token

    3.1 JWT

    JWT

    参考资料

    蚂蚁金服开发平台 签名与验签


    微信公共平台 access_token


    通过Spring Session实现新一代的Session管理

    相关文章

      网友评论

        本文标题:API接口安全性验证方案设计

        本文链接:https://www.haomeiwen.com/subject/etvefxtx.html