• 对于一些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才可以访问

  • 相关阅读:
    Linux下修改IP
    Linux 常用操作
    flex addChild 的一个小细节
    類別 ConcurrentHashMap<K,V>的更新,删除
    游戏开发者的AS3数据结构 COOL!
    Adobe Flash gets its full launch on Android
    人生时间表. 如果您有了时间
    Flex数据绑定陷阱:常见的误用和错误(一) 闪吧教材.jpg
    flash player10 Vector类型
    如何使用Flex 4新的CSS语法,兼容halo组件
  • 原文地址:https://www.cnblogs.com/wcgsir/p/6143160.html
Copyright © 2020-2023  润新知