文章来源于 :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())
{
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才可以访问

对于一些Http远程连接Api安全的看法;的更多相关文章

  1. MongoDb Windows linux平台环境及主流编程语言驱动安装同时配置mongoDb的远程连接

    <一,>MongoDB 简介篇Ruiy; MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值 ...

  2. (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)

    在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机 前提:服务器端安装桌面版的centos系统 CentOS Linux release 7.5.1804 (Core) ...

  3. SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...

  4. SFTP远程连接服务器上传下载文件-vs2010项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2010 vs2010项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...

  5. SFTP远程连接服务器上传下载文件-vs2013项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2013 vs2013项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...

  6. Hbase远程连接:Can't get the locations

    当Java API远程连接出错:Can't get the locations 原先填入的是IP地址,后来改为HOSTS文件中配置的主机名问题解决,如下红色字体部分: conf.set("h ...

  7. Android Studio使用JDBC远程连接mysql的注意事项(附示例)

    JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载 ...

  8. node-zookeeper-dubbo 和egg实现远程连接

    基于js的node-zookeeper-dubbo 和egg实现远程连接服务 const nzd = require('node-zookeeper-dubbo'); const opt={ appl ...

  9. Docker运行MongoDB及Redis及ssh端口映射远程连接

    Docker运行MongoDB及Redis及ssh端口映射远程连接 本节内容简介 在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制. ...

随机推荐

  1. 用Python编写博客导出工具

    用Python编写博客导出工具 罗朝辉 (http://kesalin.github.io/) CC 许可,转载请注明出处   写在前面的话 我在 github 上用 octopress 搭建了个人博 ...

  2. Visual Studio 2015速递(1)——C#6.0新特性怎么用

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  3. C# Azure 存储-分布式缓存Redis的新建&配置&查看

    1. 介绍 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键包括 string,hash,l ...

  4. webservice4

    原理: 参考 http://lvwenwen.iteye.com/blog/1478236 客户端通过get请求可以得到wsdl文件,也就知道服务器提供的方法和参数了,然后客户端会通过webservi ...

  5. AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端

    对于HTTPS我在网上找了一堆资料看了下, 各种协议和证书已经有点晕了 最后我现有的感觉是, 在HTTP服务器上放一个证书, 在原本的HTTP访问之前客户端先检查证书是否正确 如果客户端证书检查正确, ...

  6. iOS-工厂模式

    概述 在前面两章中,分别介绍了简单工厂模式和工厂方法模式,我们知道简单工厂模式的优点是去除了客户端与具体产品的依赖,缺点是违反了“开放-关闭原则”:工厂方法模式克服了简单工厂模式的缺点,将产品的创建工 ...

  7. 每天一个linux命令(10):cat 命令

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...

  8. 【转】“正由另一进程使用,因此该进程无法访问该文件”的问题&解决方法

    正在写一个手指画图的程序C# + WPF其中有一部分是加载外部某PNG文件,放入BitmapImage,再作为Image的Source显示在Canvas上画了几笔之后,再存回这个PNG文件 ===== ...

  9. PHP变量在内存中的存储方式

    原文:http://www.phppan.com/tag/refcount/ 每门计算机语言都需要一些容器来保存变量数据.在一些语言当中,变量都有特定的类型,如字符串,数组,对象等等.比如C和Pasc ...

  10. codeforces——Little Pony and Sort by Shift

    /* 题目大意:给你一个序列,不断地将最后边的数值移动到最前边,问最少经过多少次可以变成一个单调递增的序列! 如果不能则输出-1. 如果该序列按照不断从后向前移动排序成功,那么该序列要么只有一个单调递 ...