web api 安全设计(1)
环境:后台 ASP.NET Web API ,前端为 html,js(跨域访问)
场景1:
客户端自保管RSA 公钥和密钥,签名为客户端私钥签名,服务端用客户端公钥进行签名验证
场景2:
客户端使用SHA1签名(包含 AES_KEY)
设计逻辑:
1. 从服务端获取 【服务端 RSA 公钥】
//客户端判断公钥是否受信任
//todo...

2. 用户登陆
-- 随机生成【本地 AES_KEY 临时】
-- 用【服务端 RSA 公钥】加密敏感数据(【用户密码】、【本地 AES KEY 临时】)
-- 将登陆信息传送给服务端
登陆参数:
"user_id": user_id,
"encrypted_password": encrypted_password, -- 使用服务端RSA公钥加密的数据,包含:用户密码、登陆时间戳、随机数
"encrypted_key": encrypted_key -- 使用服务端RSA公钥加密的数据,包含:【本地 AES_KEY 临时】、登陆时间戳、随机数
说明:
由于用服务端RSA公钥加密,只有服务端的RSA私钥才能解密,
密码部分和本地随机的【本地 AES_KEY 临时】加密时进行了随机混淆,
并且服务端后台进行了时间戳检查(5分钟有效),这样就保证了登陆时的安全性。
登陆返回值:
token = obj.token; -- token
timestamp = obj.timestamp; -- 时间戳 用于客户端与服务端进行同步计数器,防止重放攻击
local_aes_key = AES_Decrypt(obj.aes_key, local_aes_key_first, local_aes_iv); -- 用客户端【本地 AES_KEY 临时】解密数据得到服务器生成给客户端的【本地 AES_KEY】,用于后期签名参数和数据加解密
enabled_data_encryption = obj.enabled_data_encryption; -- 是否启用数据加解密


3. 接口调用
接口参数:
"token": token,
"signature": signature, -- 签名
"timestamp": timestamp,
"nonce": nonce,
"method_name": method_name, -- 方法名(control_name+action_name)
"raw": raw2 -- 方法的参数
签名:
如果是场景1,签名数据为 token + "_" + timestamp + "_" + nonce + "_" + method_name + "_" + raw

如果是场景2,签名数据为 local_aes_key + "_" + token + "_" + timestamp + "_" + nonce + "_" + method_name + "_" + raw


返回数据:
由于配置为加密传输数据(接口方法参数、返回数据),故返回为 AES 加密数据的 HexStr,
需要客户端亲自使用【本地 AES KEY】解密得到真实数据。

以上讲的主要是前端的逻辑,后台逻辑下篇再续...
跨域配置配置:

web api 安全设计(1)的更多相关文章
- 基于SpringBoot的WEB API项目的安全设计
SpringBoot的开箱即用功能,大大降低了上手一个WEB应用的门槛,友好的REST接口支持,在SpringCloud微服务体系中可编程性大大提高,本篇基于一个面向企业调用方用户的WEB API项目 ...
- RESTFUL API 安全设计指南
RESTFUL API 安全设计指南 xxlegend · 2015/10/18 15:08 0x01 REST API 简介 REST的全称是REpresentational State Trans ...
- REST API 安全设计
REST API 安全设计 2017年04月27日 18:34:27 阅读数:1699 Rest API 的那些事儿 作者/ asterisk 在软件行业快速发展的今天,传统的软件授权已经不能足以 ...
- Web API接口安全了解
2017版OWASP top 10 将API安全纳入其中,足以说明API被广泛使用且安全问题严重.自己尝试整理一下,但限于本人搬砖经验还不足.水平有限,本文只能算是抛砖引玉,希望大伙不吝赐教. 了解W ...
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- Hello Web API系列教程——Web API与国际化
软件国际化是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,在创建不同语言版本时,不需要重新设计源程序代码的软件工程方法.这在很多成熟的软件开发平台中非常常见.对于.net开发 ...
- ASP.NET Web API 跨域访问(CORS)
一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
随机推荐
- No bean named 'hibernateTemplate' is defined
1.错误描述 WARN:2015-05-01 15:42:22[localhost-startStop-1] - Exception encountered during context initia ...
- Java导出防止小数显示不全工具类
1.说明 在做项目的过程中,发现导出功能中的数据显示不全,如"0.4",会显示成".4":"-0.8"会显示成"-.8" ...
- Jquery ajaxfileupload.js结合.ashx文件实现无刷新上传
先上几张图更直观展示一下要实现的功能,本功能主要通过Jquery ajaxfileupload.js插件结合ajaxUpFile.ashx一般应用程序处理文件实现Ajax无刷新上传功能,结合NPOI2 ...
- 关于ios手机游览器针对overflow:hidden设置无效的解决办法
Ordinarily, overflow: hidden; on the body tag is sufficient to prevent scrolling a web page, if for ...
- Mybatis if test 中int判断非空的坑
Mybatis 中,alarmType 是int类型.如果alarmType 为0的话,条件判断返回结果为false,其它值的话,返回true. <if test="alarmType ...
- FFMPEG 在ubuntu下的安装与使用
转载自 http://www.cnblogs.com/dwdxdy/p/3240167.html (部分一:安装) ffmpeg的安装: 1.下载源文件(以ffmpeg1.2.1为例): http:/ ...
- ASP.NET Core 一步步搭建个人网站(7)_Linux系统移植
摘要 考虑我们为什么要选择.NET Core? 因为它面向的是高性能服务器开发,抛却了 AspNet 的臃肿组件,非常轻量,加上微软的跨平台战略,对 Docker 的亲和性,对于开发人员也非常友好,所 ...
- SQL Server 历史SQL执行记录
编程执行Sql语句难免忘记保存执行的文本,或是意外设备故障多种情况的发生.对于写的简单的Sql语句丢了就丢了,但对于自己写的复杂的丢失就有些慌了, 有时候很难再次写出来,这时候就需要用一些方法找回Sq ...
- 利用CDLinux里面的水滴破解路由器密码的教程
工具: 1.CDLinux系统镜像(网上有很多,这里我提供一个我使用的:http://yunpan.cn/cFgIifL8s6zUF 访问密码 a0ef) 2.U盘一个,不需要很大.(可以使用虚拟机安 ...
- 直接删除undo及temp表空间文件后的数据库恢复一例
前几天,某用户研发找到我,说他们的研发库坏了,问我能恢复不?我问他们做了什么操作,一个小男孩儿说,看到空间满了,清除了点儿数据,我说是不是连数据库的文件也清除了,他说没有,他清除的是ORACLE_HO ...