Kong入门指南 - 使用身份验证保护服务

在本主题中,您将了解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
  1. 尝试再次访问该服务:
    使用cURL:
$ curl -i http://<admin-hostname>:8000/mock

由于添加了密钥认证,因此您将无法访问它:

 HTTP/1.1 401 Unauthorized
 ...
 {
     "message": "No API key found in request"
 }

在Kong代理请求此路由之前,它需要一个API密钥。对于此示例,由于安装了密钥身份验证插件,因此需要首先创建具有关联密钥的使用者。

设置使用者和凭证

  1. 要创建使用者,请调用Admin API和使用者的端点。下面创建了一个新的消费者,称为Consumer。

使用cURL:

 $ curl -i -X POST -d "username=consumer&custom_id=consumer" http://<admin-hostname>:8001/consumers/
  1. 设置后,调用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密钥。如果您不想一直指定密钥,请在继续操作之前禁用插件。

  1. 找到插件ID并复制。

使用cURL:

$ curl -X GET http://<admin-hostname>:8001/routes/mocking/plugins/

输出:

 "id": "2512e48d9-7by0-674c-84b7-00606792f96b"
  1. 禁用插件。
    使用cURL:
 $ curl -X PATCH http://<admin-hostname>:8001/routes/mocking/plugins/{<plugin-id>} \
 --data "enabled=false"
上一篇:kong Gateway && PostgreSQL 的安装(docker)


下一篇:Kong安装教程