目前根据业务需要先介绍2种认证插件:Key Authentication 及 HMAC-SHA1 认证

 Key Authentication

向API添加密钥身份验证(也称为API密钥)。 然后,消费者可以在 querystring 参数或 Header 头中添加其密钥,以验证其请求。

进入之前部署好的kong-ui,选择plugins,点击+号

按需求输入参数

同样创建一个消费者

其中客户Id为选填

生成后进入消费者列表,编辑该用户,按一下操作生成对应的key。

同时我们可以看到消费者中包含有其他插件所需的属性等,可以按需自己生成。

添加后如下

使用起来也很简单,将key(之前添加插件是设置的key名称)插入header值即可

如果验证错误则返回403

 HMAC Authentication

为您的API添加HMAC签名身份验证以建立使用者的身份。 插件将在代理授权和授权Header中检查有效的签名(按此顺序)。 这个插件实现遵循draft-cavage-http-signatures-00草案略有改变的签名方案。

根据如上方法,同理增加HMAC认证凭证

同理加入HMAC插件

HMAC-SHA1,C#代码实现:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace Security.Cryptography
{
public static class HMAC_SHA1
{
public static string Sign(string text, string key, string inputCharset = "utf-8")
{
Encoding _encode = Encoding.GetEncoding(inputCharset);
byte[] _byteData = Encoding.GetEncoding(inputCharset).GetBytes(text);
HMACSHA1 _hmac = new HMACSHA1(_encode.GetBytes(key)); using (CryptoStream _cs = new CryptoStream(Stream.Null, _hmac, CryptoStreamMode.Write))
{
_cs.Write(_byteData, , _byteData.Length);
}
return Convert.ToBase64String(_hmac.Hash);
}
}
}

请求的时候主要是header中

Authorization 的构造,根据官方文档

Authorization: hmac username="bob", algorithm="hmac-sha1", headers="date content-md5", signature="Base64(HMAC-SHA1(signing string))"

如果有多个Header的话,header名称用空格隔开,注意官方文档中的"date"如今应该改成"x-date",date的格式请使用GMT时间诸如"Wed, 01 Mar 2017 05:05:24 GMT"

官方文档中加密字符串:

date: Fri, 09 Oct 2015 00:00:00 GMT\ncontent-md5: lCMsW4/JJy9vc6HjbraPzw==

注意也要将date修改成x-date,如果没有content-md5这个头,那就不用加\n,直接为

x-date: Fri, 09 Oct 2015 00:00:00 GMT

这边提供一组正确的加密字串,供大家实现算法后验证

secret:secret7496

加密前字符串:x-date: Wed, 01 Mar 2017 05:05:24 GMT

摘要字符串为:XefFQYm8HRXsocJHF4ibDEPWW3k=

重要备注:

这个HMAC主要碰到2类错误

1.HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication

这个错误主要2种情况都跟日期有关

  1)服务器时间跟客户端发出去的x-date的间隔时间超过之前定义的clock skew秒数(通过docker容器安装的容易产生这个问题)

  2)请确认是GMT时间格式

  3)把date改成x-date

2.HMAC signature does not match

这个就是签名算法有问题了

API网关Kong系列(四)认证配置的更多相关文章

  1. API网关Kong系列(一)初识

    最近工作需要,加上国内Kong的文章相对缺乏(搜来搜去就那么两篇文章),而且官方文档在某些demo上也有一些过时的地方,遂提笔记录下这些,希望能有帮助. 先随大流介绍下KONG(主要参考官网): 官方 ...

  2. API网关Kong系列(三)添加服务

    进入之前部署好的kong-ui,默认第一次登陆需要配置kong服务的地址 进入API菜单,点击+号 按照要求填入相关信息 至此完成,可以使用诸如 https://your.domain.com:208 ...

  3. API网关Kong系列(二)部署

    部署环境: [OS] centos 6.8(如果是centos6.5,请自行先升级到6.8,否则不支持docker) [Docker] Client version: 1.7.1 Client API ...

  4. API 网关 Kong

    什么是 API 网关? 所谓网关,主要作用就是连接两个不同网络的设备,而今天所讲的 API 网关是指承接和分发客户端所有请求的网关层. 为什么需要网关层?最初是单体服务时,客户端发起的所有请求都可以直 ...

  5. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用

    写在前面   Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...

  6. API网关——Kong实践分享

    概述 01 什么是Kong Kong是一个在Nginx中运行的Lua应用程序,可以通过lua-nginx模块实现,Kong不是用这个模块编译Nginx,而是与OpenRestry一起发布,OpenRe ...

  7. API网关--Kong的实践

    1. 什么是Kong 目前互联网后台架构一般是采用微服务,或者类似微服务的形式,应用的请求通常需要访问多个后台系统.如果让每一个后台系统都实现鉴权.限流.负载均衡.审计等基础功能是不合适的,通用的做法 ...

  8. shiro实战系列(四)之配置

    Shiro之配置 Shiro 被设计成能够在任何环境下工作,从最简单的命令行应用程序到最大的的企业群集应用.由于环境的多样性,使得许多配置机制适用于它的配置. 一. 许多配置选项 Shiro的Secu ...

  9. API网关Kong部署和使用文档

    KONG安装使用说明 系统版本:ubuntu14 1.下载安装包 $ wget https://github.com/Mashape/kong/releases/download/0.8.3/kong ...

随机推荐

  1. grafana+influxdb+telegraf监控服务器cpu,内存和硬盘

    随便抄了一篇,目前我们的项目也在用,这个是linux和windows通吃的一种监控方案,非常有效,详细和优美,需要监控什么具体的业务内容,自己向influxdb中插入就行了. 监控服务器状态是运维必不 ...

  2. [转载]redis持久化的两种操作RDB和AOF

    Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...

  3. 51Nod:独木舟问题(贪心)

    n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 输入 第一行包含两个正 ...

  4. HDU 4035 Maze 概率DP 搜索

    解题报告链接: http://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html 先推公式,设计状态,令DP[i]表示在房间i退出要走步数 ...

  5. CTF之栅栏密码

    栅栏密码是比较常见的加密方式之一,其原理是将一组明文分成N组,将每一组的第一个明文取出按照顺序组成一串密文,并将这段密文附在第一段密文之后,以此类推 例如: 分了两组,即秘钥为2: 明文:THERE ...

  6. 相邻行列相互影响的状态类问题(类似状压dp的搜索)(POJ3279)

    POJ3279http://poj.org/problem?id=3279 题意:黑白的板,每次选择一个十字形翻转(十字板内黑白互换,若是边界则不管),求最小将原图变为全白的策略. 这是一道对于每个格 ...

  7. ACM中的取模

    取模本身的性质:(之前有一篇博客写过)三则运算(+,-,*)过程中的取模与最后的取模一样(前提是最后不超long long(或int) 范围,所以为防止超范围,直接对三则运算中的过程取模) 然后就是A ...

  8. python list 去掉重复元素

    貌似用遍历最方便. http://www.cnblogs.com/tudas/p/python-delete-duplicate-element-from-list.html

  9. event store

    Event Store The documentation has now moved to the wiki in this repository. For a quick start, look  ...

  10. 【转】每天一个linux命令(55):traceroute命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/03/07/2947326.html 通过traceroute我们可以知道信息从你的计算机到互联网另一端的 ...