文章来源于 :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. jquery获取checkbox的值并post提交

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. multiOTP配置安装

    https://code.google.com/p/google-authenticator/ 是google提供的OTP解决方案. http://www.multiotp.net/ 是一个开源otp ...

  3. ssh/openssh

    http://www.cnblogs.com/wwufengg/articles/ssh-openssh-detail.html http://www.cnblogs.com/jjkv3/archiv ...

  4. select2初始化默认值

    之前用select2初始化默认值使用了select2('val','1'),这样做没问题,但只能用在单选上,多选的话,即使将val后面的值改成数组['0', '2']这种形式也没用. <scri ...

  5. paip.lucene 4.3 中文语义搜索最佳实践

    paip.lucene 4.3 中文语义搜索最佳实践 首先一个问题是要不要使用lucene 自带的分词器...我觉得最好不使用哪自带的分词器.效果还凑火,就是不好控制... 先使用ik,ict,mms ...

  6. PHP 函数基础

    1.简单函数     函数四要素:返回类型,函数名,参数列表,函数体 function Show(){      echo "hello";}Show();         输出了 ...

  7. 将图片的二进制字节 在HTML页面中显示

    两种方法: 后端的一般处理程序:Imge.ashx using System; using System.Collections.Generic; using System.Linq; using S ...

  8. vm中centos7配置静态ip访问外网

    我使用的是桥接方式,具体步骤如下   1.设置虚拟机网络: 编辑>虚拟网络编辑器   2.设置vm中操作系统的网络设置   3.进入centos7中后修改网络配置:     另附我的宿主机网络配 ...

  9. Open Cascade Data Exchange STL

    Open Cascade Data Exchange STL eryar@163.com 摘要Abstract:介绍了三维数据交换格式STL的组成,以及Open Cascade中对STL的读写.并将O ...

  10. 二分查找java代码

    public int find(long searchKey){ int i; int begin = 0; int end = nElems - 1; while(true){ i = (begin ...