环境:后台 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)的更多相关文章

  1. 基于SpringBoot的WEB API项目的安全设计

    SpringBoot的开箱即用功能,大大降低了上手一个WEB应用的门槛,友好的REST接口支持,在SpringCloud微服务体系中可编程性大大提高,本篇基于一个面向企业调用方用户的WEB API项目 ...

  2. RESTFUL API 安全设计指南

    RESTFUL API 安全设计指南 xxlegend · 2015/10/18 15:08 0x01 REST API 简介 REST的全称是REpresentational State Trans ...

  3. REST API 安全设计

    REST API 安全设计 2017年04月27日 18:34:27 阅读数:1699   Rest API 的那些事儿 作者/ asterisk 在软件行业快速发展的今天,传统的软件授权已经不能足以 ...

  4. Web API接口安全了解

    2017版OWASP top 10 将API安全纳入其中,足以说明API被广泛使用且安全问题严重.自己尝试整理一下,但限于本人搬砖经验还不足.水平有限,本文只能算是抛砖引玉,希望大伙不吝赐教. 了解W ...

  5. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  6. bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序

    也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...

  7. Hello Web API系列教程——Web API与国际化

    软件国际化是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,在创建不同语言版本时,不需要重新设计源程序代码的软件工程方法.这在很多成熟的软件开发平台中非常常见.对于.net开发 ...

  8. ASP.NET Web API 跨域访问(CORS)

    一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...

  9. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

随机推荐

  1. WDF驱动的编译、调试、安装

    编译和调试使用WDK编译,源代码应包括wdf.h,ntddk.h以及KMDF_VERSION=1,编译使用/GS.KMDF包括以下库:1). WdfDriverEntry.lib(编译时绑定):驱动入 ...

  2. Flex动态获取数据,服务中断报错

    1.错误原因 2.错误原因 由上面提示可知,软件引起的链接中断,导致出错 3.解决办法 检查数据库链接,重新启动服务

  3. linq根据传入数据集合查询对应子级数据

    工作中经常用到的linq根据传入数据集合查询对应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点对应ID数据集合,再根据ID数据集合查询全部子级数据. //获取缓存数据 ...

  4. 前端框架Vue入门

    1.Vue简介 Vue是一套构建用户界面的渐进性框架.Vue采用自底向上增量开发的设计,其关注点在图层,与angular的区别就在这里,它关注的是图层,而angular注释的是数据. 2.与React ...

  5. 剑指offer 第十天

    37.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数. 采用二分查找法 /* 方法一:时间复杂度O(n),不可选 */ public class Solution { public i ...

  6. C#图解教程 第十章 结构

    结构 什么是结构结构是值类型对结构赋值构造函数和析构函数 实例构造函数静态构造函数构造函数和析构函数小结 字段初始化语句是不允许的结构是密封的装箱和拆箱结构作为返回值和参数 关于结构的其他信息 结构 ...

  7. Python 环境的搭建

    Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:http://www.python.org/ 你可以在以下链接中下载 Python 的文档,你可以下载 ...

  8. Fu+ 后台管理 (Thinkphp)

    简要:小主从事PHP二年,期间一直做后台;为此向大家分享我制作一个后台(权限),希望能够跟各位PHP大神学习探索,如果有不对或者好的建议告知下:*~*! 1. 介绍 Fu+ 后台管理,是本人基于H+好 ...

  9. sass学习笔记--摘录

    //$a: Helvetica, sans-serif //$b: #333 // //body //font: 100% $a //color: $b //$a: red //body //colo ...

  10. 【BZOJ4652】【NOI2016】循环之美(莫比乌斯反演,杜教筛)

    [BZOJ4652]循环之美(莫比乌斯反演,杜教筛) 题解 到底在求什么呢... 首先不管他\(K\)进制的问题啦,真是烦死啦 所以,相当于有一个分数\(\frac{i}{j}\) 因为值要不相等 所 ...