Kong入门指南 - 6.使用身份验证保护服务
Kong入门指南
目录
1. 总览
2. 准备管理Kong Gateway
3. 通过Kong Gateway公开您的服务
4. 保护您的服务
5. 通过代理缓存提高性能
6. 使用身份验证保护服务
7. 设置智能负载平衡
在本主题中,您将了解API网关身份验证,设置密钥身份验证插件以及添加使用者。
如果您根据入门指南学习,请确保已完成“Kong入门指南 - 通过代理缓存提高性能 ”。
什么是身份验证?
API网关身份验证是控制允许使用您的API传输的数据的重要方法。基本上,它使用一组预定义的凭据来检查特定使用者是否有权访问API。
Kong Gateway有一个插件库,这些插件提供了实现API网关身份验证的最广为人知和使用最广泛的方法的简单方法。以下是一些常用的:
- 基本认证
- 密钥认证
- OAuth 2.0身份验证
- LDAP认证高级
- OpenID连接
身份验证插件可以配置为应用于Kong Gateway内的服务实体。反过来,服务实体与它们表示的上游服务是一对一映射的,从本质上讲意味着认证插件直接应用于那些上游服务。
为什么要使用API网关身份验证?
启用身份验证后,除非客户端首先成功进行身份验证,否则Kong Gateway不会代理请求。这意味着上游(API)不需要对客户端请求进行身份验证,也不会浪费用于验证凭据的关键资源。
Kong Gateway可以查看所有身份验证尝试(成功,失败等等),从而可以对这些事件进行分类和控制,以证明适当的控制措施已经存在并实现合规性。身份验证还使您有机会确定如何处理失败的请求。这可能意味着仅阻止请求并返回错误代码,或者在某些情况下,您可能仍希望提供有限的访问权限。
在此示例中,您将启用密钥验证插件。API密钥身份验证是进行API身份验证的最流行的方法之一,可以实现以根据需要创建和删除访问密钥。
有关更多信息,请参见什么是API网关身份验证?。
设置密钥认证插件
1.在端口上调用Admin API 8001并配置插件以启用密钥身份验证。对于此示例,将插件应用于您创建的/ mock路由。
使用cURL:
$ curl -X POST http://<admin-hostname>:8001/routes/mocking/plugins \
--data name=key-auth
- 尝试再次访问该服务:
使用cURL:
$ curl -i http://<admin-hostname>:8000/mock
由于添加了密钥认证,因此您将无法访问它:
HTTP/1.1 401 Unauthorized
...
{
"message": "No API key found in request"
}
在Kong代理请求此路由之前,它需要一个API密钥。对于此示例,由于安装了密钥身份验证插件,因此需要首先创建具有关联密钥的使用者。
设置使用者和凭证
- 要创建使用者,请调用Admin API和使用者的端点。下面创建了一个新的消费者,称为Consumer。
使用cURL:
$ curl -i -X POST -d "username=consumer&custom_id=consumer" http://<admin-hostname>:8001/consumers/
- 设置后,调用Admin API为上面创建的使用者设置密钥。对于此示例,将密钥设置为apikey。如果未输入任何密钥,则Kong将自动生成密钥。
使用cURL:
$ curl -i -X POST http://<admin-hostname>:8001/consumers/consumer/key-auth -d 'key=apikey'
结果:
HTTP/1.1 201 Created
...
{
"consumer": {
"id": "2c43c08b-ba6d-444a-8687-3394bb215350"
},
"created_at": 1568255693,
"id": "86d283dd-27ee-473c-9a1d-a567c6a76d8e",
"key": "apikey"
}
现在,您已经为使用者提供了API密钥,以访问该路由。
验证密钥验证
要验证密钥身份验证插件,请使用密钥值为的标头再次访问模拟路由。apikeyapikey
使用cURL:
$ curl -i http://<admin-hostname>:8000/mock/request -H 'apikey:apikey'
您应该得到一条HTTP/1.1 200 OK消息作为回应。
(可选)禁用插件
如果您按照主题逐个遵循此入门指南,则在以后的所有请求中都需要使用此API密钥。如果您不想一直指定密钥,请在继续操作之前禁用插件。
- 找到插件ID并复制。
使用cURL:
$ curl -X GET http://<admin-hostname>:8001/routes/mocking/plugins/
输出:
"id": "2512e48d9-7by0-674c-84b7-00606792f96b"
- 禁用插件。
使用cURL:
$ curl -X PATCH http://<admin-hostname>:8001/routes/mocking/plugins/{<plugin-id>} \
--data "enabled=false"