1、前言
Kong 的核心原则之一是它通过插件的可扩展性。插件允许你轻松的向服务添加新功能或使其更易于管理。
2、key-auth 插件
在下面的步骤中,您将配置 key-auth 插件以向您的服务添加身份验证。在添加此插件之前,对您的服务的所有请求都将在上游代理。添加和配置此插件后,只有具有正确密钥的请求才会被代理 – 所有其他请求将被 Kong 拒绝,从而保护您的上游服务免遭未经授权的使用。
3、配置 Key-auth 插件
要为您在 Kong 中配置的服务配置 key-auth 插件,请发出以下 cURL 请求:
3.1、在 service 上启动插件
$ curl -i -X POST \
--url http://localhost:8001/services/{service name}/plugins/ \
--data 'name=key-auth'
3.2、在 Route 上启动插件
$ curl -i -X POST \
--url http://localhost:8001/routes/{routes id or name}/plugins/ \
--data 'name=key-auth'
注意:此插件还接受一个 config.key_name 的默认参数【’apikey’】。他是一个标题和参数名称列表(两者都支持),请求期间需要包含 apikey 参数。
3.3、key-auth Api 参数列表
形式参数 | 默认值 | 描述 |
name | 插件名称 | |
serivce_id | 服务 id | |
toute_id | 路由 id | |
enabled | TRUE | 是否启用 |
config.key_names | apikey | key 的名称,用逗号隔开,只能是大小写字母,数字,下划线杠等 |
config.key_in_body | FALSE | 如果启用,插件读取请求体,并尝试从中读取到 key |
config.hide_credentials | 如果身份验证失败,该值(消费之 uuid)用做匿名使用者。如果为空,请求失败提示认证失败 4xx, 注意这个值必须制定消费者 id 属性,而不是他的 custom_id | |
config.ren_on_preflight | TRUE | 如果设置为 true 那么插件将运行在请求之前。如果为 false 那么请求将总是被允许。 |
根据上述操作、一个简单的插件就常见完成了,我在测试时是创建在 service 上,用的是《【API 网关 Kong 系列七】- 完整转发请求示例》中的服务示例.
3.4、验证插件
发送以下 CURL 命令以验证 key-auth 插件是否已配置成功。
$ curl -i -X GET \
--url http://localhost:8000/ \
--header 'Host: example.com'
由于未指定所有的 apikey heaser 或者参数,因此响应为 401 Unauthorized
HTTP/1.1 401 Unauthorized
...
{"message": "No API key found in request"}
由上我们已经成功配置了 key-auth 插件,想使用我们还的将消费者添加到服务中,以便我们可以继续通过 Kong 实现代理请求。
4、添加一个消费者
消费者 Consumer 我在这就不过多的介绍了,还不了解的可以看《企业级 API 网关 Kong 系列》
创建一个用户名为 Jason 的消费者
$ curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=Jason"
响应如下
HTTP/1.1 201 Created
Content-Type: application/json
Connection: keep-alive
{
"username": "Jason",
"created_at": 1428555626000,
"id": "bbdf1c48-19dc-4ab7-cae0-ff4f59d87dc9"
}
到这成功的将消费者添加到 Kong 中
注意:custom_id 在创建可以在创建消费着是指定此参数。
5、为消费者提供密钥凭证
$ curl -i -X POST \
--url http://localhost:8001/consumers/Jason/key-auth/ \
--data 'key=ENTER_KEY_HERE'
6、验证
可以发送如下请求,来验证我们的 Jason 的密钥是否生效
$ curl -i -X GET \
--url http://localhost:8000 \
--header "Host: example.com" \
--header "apikey: ENTER_KEY_HERE"
好了,到这我们一个 Key-auth 的插件已经配置完成。
7. 总结
插件的使用也很简单,主要为以下几个步骤。
1: 首先要启用一个插件,可以在 service 或者 route 上。
2: 需要给插件创建一个消费者,并设置访问凭着
想了解更多关于 Kong 网关的请移步 >>>>> 企业级 API 网关 Kong