环境:后台 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. freemarker处理哈希表的内建函数

    freemarker处理哈希表的内建函数 1.简易说明 (1)map取值 (2)key取值 2.实现示例 <html> <head> <meta http-equiv=& ...

  2. eclipse和android studio的目录结构分析

    不管你喜不喜欢,愿不愿意,自从Google宣布正式停止对于eclipse的支持,要开发android的APP,你都得乖乖的用android studio(以下简称AS)了,不过也不是什么悲伤的故事,对 ...

  3. Django学习-9-ORM多对多操作

    创建多对多:             方式一:自定义关系表                 class Host(models.Model):                     nid = mo ...

  4. 一个TokenUtils程序,亲测可用

    1. Token用途 token是HTTP请求的令牌,通俗一点说是凭证,目的是防止api被随意访问获取信息. 可使用随机数生成,也可以使用用户id.密码或时间之类进行排序或者加密进行声称. token ...

  5. luogu【P2753】[USACO4.3]字母游戏Letter Game

    这个题...一开始看了很久题目(并且问了机房几个大佬)才明白题意.. (原题入口) 题意 大概是一开始给你一些字母出现的次数 你之后组成的单词(最多两个单词)每个字母出现次数 必须小于或等于标准(st ...

  6. [BZOJ1016] [JSOI2008] 最小生成树计数 (Kruskal)

    Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...

  7. java中获取所有的请求参数

    //获取所有的请求参数 Enumeration<String> paraNames=request.getParameterNames(); for(Enumeration<Stri ...

  8. 初读 c# IL中间语言

    对一段c#编写的代码,有一些疑问,想通过IL中间语言看看,编译后是怎么处理的.代码如下: static StringBuilder sb = new StringBuilder(); ; ; /// ...

  9. JWT 在前后端分离中的应用与实践

    关于前后端分离 前后端分离是一个很有趣的议题,它不仅仅是指前后端工程师之间的相互独立的合作分工方式,更是前后端之间开发模式与交互模式的模块化.解耦化.计算机世界的经验告诉我们,对于复杂的事物,模块化总 ...

  10. [转]Nginx基本功能极速入门

    原文链接:Nginx基本功能极速入门 | 叉叉哥的BLOG 本文主要介绍一些Nginx的最基本功能以及简单配置,但不包括Nginx的安装部署以及实现原理.废话不多,直接开始. 1.静态HTTP服务器 ...