zoukankan      html  css  js  c++  java
  • 对于一些Http远程连接Api安全的看法;

    文章来源于 :http://lesg.cn/?p=122 我的个人博客站点

    对于一些Http远程连接Api安全的看法;

    当不同系统需要互相通信的时候;如果无法用webservice等方式链接的时候另一种方式就是采用Http通信了;

    如果有用过短信API的同学应该知道;大部分都是使用HttpPost 的方式来发送短信给客户的,那么怎么保证这个数据是安全的;

    对此小弟有一些小见解,请大家拍砖;

    例子:

    某公司需要开发一个转盘抽奖的活动;但是两个系统又要分开;

    A端是发送请求数据的服务器; B端是接收数据和返回结果的服务器;

    我的解决思路是这样的;

    首先A端口发送一个Post到B端 Post采用Key的方式; Key的值为 用户id,Key加密(user,key+日期格式化成YYMMddYY ;采用字符串分隔)

    /*A端部分请求代码*/
     
    var nuserid = User.Identity.Name;
    dic.Add("id", DESEncrypt.Encrypt(nuserid + "," + OtherConfigs.ENT_KEY + DateTime.Now.ToString(OtherConfigs.ENT_DT_FONT)));
     
    var res = HttpHelp.CreatePostHttpResponse("https:///****.com/goto/CjValidateToken", dic, null, null, Encoding.UTF8, null);

    发送验证请求到B端

    B端收到请求后;解析Key,取出字符串分隔中的Key对比Key;之后将userid保存到Redis中并生产一串GUID返回给A端

    /*B端部分解析代码*/
     
    if(!Comm.ValidateKey(id,out userid,out msg)) //验证key的正确性
    {
    return msg;
    }
     
    var tokenName = Guid.NewGuid().ToString("n"); //创建一串GUID
     
    RedisStrOp.SetString(tokenName, userid); //以 GUID为Key 存入Userid
     
    return resToken + tokenName; //返回结果+GUID

    A端收到B端的返回代码之后解析

    并使用GUID直接 HTTP Get 跳转到 B端的另一个验证端

    /*A端的跳转代码 */
     
    return Redirect("https://***.com/goto/Cj/" + token);

    B端的另一个验证端接收到A端的GUID后马上解析GUID; 从Redis中得到UserID;

    判断此UserID是否存在系统的数据库中(即此用户是否为真实存在的用户)

    /// <summary>
    /// 针对m 和 www 跳转捡来
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public ActionResult Cj(string id)
    {
    var token = id ?? "";
    if (string.IsNullOrEmpty(id))
    return Redirect("/Pay/Msg/不合法参数");
    var userid = RedisStrOp.GetString(id);
    if (string.IsNullOrEmpty(userid))
    return Redirect("/Pay/Msg/系统参数超时;请重新进入此页面");
    var exists = false;
    using (var db = new SqlDbOperates(6))
    {
    db.ConditionExpress = "userid=@userid";
    db.AddConditionParameter("@userid", userid);
    exists = db.Exist("A端口user_table");
    }
    if(!exists)
    return Redirect("/PayStart/Msg/此用户不存在");
    Session["userid"] = userid;
    Session["login"] = true;
    SLogin(userid, ""); //调用Authorize 的登录方法
    return Redirect("/Pay/index");
    }

    最终跳转到B端的抽奖页面

    其他方面使用IP白名单;只有指定的IP才可以访问

  • 相关阅读:
    【HDOJ6701】Make Rounddog Happy(启发式合并)
    【HDOJ6731】Angle Beats(极角排序)
    【BZOJ1132】Tro(叉积)
    【CF1236D】Alice and the Doll(set)
    Storm
    Spark
    Python基础(2)
    数据库漫谈
    Python基础(1)
    C/C++链接过程相关
  • 原文地址:https://www.cnblogs.com/wcgsir/p/6143160.html
Copyright © 2011-2022 走看看