在上文已经讲述了基础介绍,这篇文章详细讲解API密钥方式。

利用何种加密方式呢?

经过上面加密算法的理解,单向加密不仅性能高,而且有压缩性,即长度一致,有效减少网络传输过程中的字节大小。适合我们这种调用服务API的方式。所以我们使用不可逆的加密算法,选择SHA。

因为服务API是供所有企业/个人使用,一个企业/个人可理解为一个租户。如果都使用SHA来加密日期+AccessKeyId的话,不安全。所以需要用密钥生成,就需要用到HMAC算法。HMAC即利用密钥来生成固定长度的hash加密值,提高安全性。即做了两层防御。第一层使用SHA,第二层使用HMAC。所以有很流行的HMACSHA加密算法,即他们的结合体,HMAC为SHA加盐。

根据需求,为何使用这种模式?

      第一,时间有效性。利用日期字段来降低加密后的密钥被盗用的风险。传输过程中,即使给盗用传输值,也只有xx分钟(这里设置10分钟)的有效期。

第二,效率快,耗CPU少。单向加密性能较高,无需解密。

第三,所有平台代码通用。例如c#、java、python等。

流程详解

在使用服务前,首先企业/个人需要登陆我们的系统,来进行用户注册。注册完成之后,申请我们的服务使用。申请服务使用成功后,会给到用户调用服务API的两个关键密钥信息AccessKeyId、AccessKeySecret。AccessKeyId是密钥的Id,AccessKeySecret是密钥值,所以AccessKeySecret是属于高密信息,不能泄露。下面是流程图:

在客户端,使用服务时,为了安全性,服务这边需要生成加密后的hash值,并且通过消息头的方式,传送hash值、日期、AccessKeyId到服务器。

hash值的生成:是明文字符串=当前日期+AccessKeyId,然后通过密钥AccessKeySecret加密明文字符串,最后得到hash值。

在服务端,接受到消息头的三个信息:当前日期、AccessKeyId、加密后的hash值。首先服务器取得当前日期,与传送过来的日期做对比,看是否过期(10分钟),过期则返回调用失败。

然后使用AccessKeyId在DB或者缓存找到AccessKeySecret,生成hash加密后的字符串。再与传送过来的hash加密后的字符串做对比,如果相等,则可以调用API,否则放回失败信息。如下图:


相关.net core代码展示(.net代码也一样)

生成HMAC SHA265:

/// <summary>

/// Hmac Sha256加密

/// </summary>

/// <param name="text"></param>

/// <param name="key"></param>

/// <returns></returns>

public static string GetHash(string text, string key)

{

UTF8Encoding encoding = new UTF8Encoding();

Byte[] textBytes = encoding.GetBytes(text);

Byte[] keyBytes = encoding.GetBytes(key);

Byte[] hashBytes;

using (HMACSHA256 hash = new HMACSHA256(keyBytes))

hashBytes = hash.ComputeHash(textBytes);

return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

}

总结

在上述过程中,你可以使用租户Id来替换AccessKeyId来提高安全性。如果这样还觉得不安全,可以用可逆加密算法,对AccessKeyId进行加密后传输。

上述过程利用了HMACSHA加密算法,对日期与AccessKeyId进行了加密。再利用日期来提高被盗用的安全性。

我们这里使用的SHA是使用SHA256算法。目前国内很多公司是使用SHA1。

可以关注本人的公众号,多年经验的原创文章共享给大家。

如何设计提高服务API的安全性(二)API密钥方式详解的更多相关文章

  1. RocketMQ详解(二)安装使用详解

    专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...

  2. (原创)LAMP搭建之二:apache配置文件详解(中英文对照版)

    LAMP搭建之二:apache配置文件详解(中英文对照版) # This is the main Apache server configuration file. It contains the # ...

  3. Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务

    一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2  应用服务和数据服务拆分  特点:App.DB.Fi ...

  4. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  5. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验(一 ...

  6. Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream-->干什么事(具体怎么做,就交给Stream)--》聚合

    Function.identity()是什么? // 将Stream转换成容器或Map Stream<String> stream = Stream.of("I", & ...

  7. 第15.10节 PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解

    PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计 ...

  8. Hadoop Mapreduce分区、分组、二次排序过程详解[转]

    原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2) ...

  9. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

随机推荐

  1. 201871010121 王方 《面向对象程序设计(Java)》第6-7周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  2. Spring Data介绍

    Spring Data是Spring 的一个子项目.用于简化数据库访问,支持NoSQL和关系数据库存储.其主要目标是使数据库的访问变得方便快捷. Spring Data 项目所支持NoSQL存储: M ...

  3. HTTPS各版本安全策略HTTPS1_1_TLS1_0、HTTPS2_TLS1_0、HTTPS2_TLS1_2

    来自阿里云 https://help.aliyun.com/document_detail/115169.html HTTPS安全策略 更新时间:2019-04-26 14:49:12      分组 ...

  4. Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件、各个常见的钩子函数)

    表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  5. webapi基于单请求封装多请求的设计【转】

    怎么说,单请求封装多请求,这句话确实有点绕了,但还是要看清楚,想明白这到底是怎么一回事,单请求即一次请求(get,post,put,delete),封闭多请求,即在客户端发送的一个请求中可能包含多个子 ...

  6. java实体 和 xml相互转换

    参考: https://blog.csdn.net/LookForDream_/article/details/88884316 https://zhuchengzzcc.iteye.com/blog ...

  7. 1.Vue前端核心分析

    1.Vue SoC:关注点分离原则 网络通信:axios 页面跳转:vue-router 页面管理:vuex Vue-UI:ICE.ElementUI 集大成者:MVVM+虚拟DOM 2.MVVM 异 ...

  8. 0x01 Wechall writeup

    目录 0x01 Wechall writeup Limited Access Training: Crypto - Caesar II Impossible n'est pas français Tr ...

  9. 考试总结(橙题WA)

    又逢校内测,成绩变化大 初见三道题,暗喜AK辣 谁知数据毒,特判不到家 三题两题WA,心态已爆炸 T1(我不想再见到这道题): 附上多年前AC但是随便出(毒瘤)一组数据就可以卡掉的代码: #inclu ...

  10. Codechef August Challenge 2019 Division 2

    Preface 老年菜鸡终于开始打CC了,由于他太弱了所以只能打Div2 因为台风的原因challenge并没有写,所以水了个Rank7 A Football SB模拟题不解释 #include< ...