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 ...
随机推荐
- ClientAbortException: java.net.SocketException: Software caused connection abort: socket write erro
1.错误描述 ClientAbortException: java.net.SocketException: Software caused connection abort: socket writ ...
- ASP.NET性能调试
该文转自mx5721的博客:http://blog.csdn.net/mx5721/article/details/9138135 设计考虑 性能和安全的考虑 应用程序逻辑划分的考虑:逻辑分层,然后使 ...
- 芝麻HTTP:分析Robots协议
利用urllib的robotparser模块,我们可以实现网站Robots协议的分析.本节中,我们来简单了解一下该模块的用法. 1. Robots协议 Robots协议也称作爬虫协议.机器人协议,它的 ...
- httpclient的get带参不带参post带参不带参的简单应用
一,基础的的应用 1.1,get的无参请求 @Test public void doGet() throws Exception { //创建一个httpclient对象 CloseableHttpC ...
- Linux 的特殊变量(2)
1.echo $? 输出结果为0 表示命令执行成功 场景:判断上一个命令是否成功 扩展 0:成功 2 :权限拒绝 1~125:表示运行失败 126:找到命令,但是无法执行 127:未找到要运行的命令 ...
- html试题
1.水平线 要求:1)线左右宽度占屏幕70% 2)设置线的颜色 <html> <body> <h1>水平线</h1> <hr align=&quo ...
- 【BZOJ3931】【CQOI2015】网络吞吐量(最短路,网络流)
[BZOJ3931][CQOI2015]网络吞吐量(最短路,网络流) 题面 跑到BZOJ上去看把 题解 网络流模板题??? SPFA跑出最短路,重新建边后 直接Dinic就行了 大火题嗷... #in ...
- bzoj2157
LCT板子,打个lazy即可 # include <stdio.h> # include <stdlib.h> # include <iostream> # inc ...
- javascript 原型及原型链详解
我们创建的每个函数都有一个 prototype (原型)属性,这个属性是一个指针,指向一个原型对象,而这个原型对象中拥有的属性和方法可以被所以实例共享. function Person(){ } Pe ...
- Lintcode247 Segment Tree Query II solution 题解
[题目描述] For an array, we can build a Segment Tree for it, each node stores an extra attribute count t ...