对于一些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())
{
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安全的看法;的更多相关文章
- MongoDb Windows linux平台环境及主流编程语言驱动安装同时配置mongoDb的远程连接
<一,>MongoDB 简介篇Ruiy; MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值 ...
- (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)
在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机 前提:服务器端安装桌面版的centos系统 CentOS Linux release 7.5.1804 (Core) ...
- SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例
本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...
- SFTP远程连接服务器上传下载文件-vs2010项目实例
本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2010 vs2010项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...
- SFTP远程连接服务器上传下载文件-vs2013项目实例
本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2013 vs2013项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...
- Hbase远程连接:Can't get the locations
当Java API远程连接出错:Can't get the locations 原先填入的是IP地址,后来改为HOSTS文件中配置的主机名问题解决,如下红色字体部分: conf.set("h ...
- Android Studio使用JDBC远程连接mysql的注意事项(附示例)
JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载 ...
- node-zookeeper-dubbo 和egg实现远程连接
基于js的node-zookeeper-dubbo 和egg实现远程连接服务 const nzd = require('node-zookeeper-dubbo'); const opt={ appl ...
- Docker运行MongoDB及Redis及ssh端口映射远程连接
Docker运行MongoDB及Redis及ssh端口映射远程连接 本节内容简介 在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制. ...
随机推荐
- Fragment提交transaction导致state loss异常
下面自从Honeycomb发布后,下面栈跟踪信息和异常信息已经困扰了StackOverFlow很久了. java.lang.IllegalStateException: Can not perform ...
- Spring Trasnaction管理(2)- 事务AOP
问题导读 spring AOP是在如何进行的 spring 用cglib和jdkProxy管理的事务有何区别 Spring AOP管理 Spring主要的两个核心功能IOC与AOP.IOC的代码解析可 ...
- Atitit html5 Canvas 如何自适应屏幕大小
Atitit html5 Canvas 如何自适应屏幕大小 可以用JS监控屏幕大小,然后调整Canvas的大小.在代码中加入JS 1 2 3 4 5 6 7 $(window).resize ...
- JS 内置对象
内置对象的定义:有ECMAScript实现提供的.不依赖与宿主环境的对象,在ECMAScript运行之前就已经创建好的对象就叫做内置对象. 就是说,是不需要我们开发人员先是的实例化对象就能够调用和运行 ...
- Unity 碰撞检测中碰撞器与触发器的区别
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...
- WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单M ...
- hibernate(五)核心开发接口与对象的三种状态
本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...
- Android Handler的使用示例:结合源码理解Android Handler机制(一)
什么是Handler? Android 的官方解释: 文档分节1:A Handler allows you to send and process Message and Runnable objec ...
- poj1703Find them, Catch them(并查集以及路径压缩)
/* 题目大意:有两个不同的黑帮,开始的时候不清楚每个人是属于哪个的! 执行两个操作 A a, b回答a, b两个人是否在同一帮派,或者不确定 D a, b表示a, b两个人不在同一个帮派 思路:利用 ...
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...