微服务网关Kong – 身份验证

1,661次阅读

共计 3309 个字符,预计需要花费 9 分钟才能阅读完成。

Kong系列文章

1、微服务网关Kong – 简介

2、微服务网关Kong – 安装

3、微服务网关Konga – 安装

4、微服务网关Kong – 代理

5、微服务网关Kong – 身份验证

6、微服务网关Kong – 安全

7、微服务网关Kong – 流量控制

什么是身份验证?

API网关身份验证是控制允许使用您的API传输的数据的重要方法。基本上,它使用一组预定义的凭据来检查特定使用者是否有权访问API。

Kong Gateway有一个插件库,这些插件提供了实现API网关身份验证的最广为人知和使用最广泛的方法的简单方法。以下是一些常用的:

  • 基本认证

  • 密钥认证

  • OAuth 2.0身份验证

  • LDAP认证高级

  • OpenID连接

为什么要使用API网关身份验证?

启用身份验证后,除非客户端首先成功进行身份验证,否则Kong Gateway不会代理请求。

这意味着上游(API)不需要对客户端请求进行身份验证,也不会浪费用于验证凭据的关键资源。

Kong Gateway可以查看所有身份验证尝试(成功,失败等等),从而可以对这些事件进行分类和控制,以证明适当的控制措施已经存在并实现合规性。身份验证还使您有机会确定如何处理失败的请求。这可能意味着仅阻止请求并返回错误代码,或者在某些情况下,您可能仍希望提供有限的访问权限。

1、密钥认证(key-auth)

1.1 开启密钥认证

在端口上调用Admin API 8001并配置插件以启用密钥身份验证。对于此示例,将插件应用于您创建的b0db420a-d3c3-45ee-8b25-11f3fd8ca283路由。

curl -X POST http://172.16.60.8:8001/routes/b0db420a-d3c3-45ee-8b25-11f3fd8ca283/plugins --data name="key-auth"
​
{
  "created_at": 1609208272,
  "id": "81382fb7-1b7f-478b-848e-965863f36165",
  "tags": null,
  "enabled": true,
  "protocols": ["grpc", "grpcs", "http", "https"],
  "name": "key-auth",
  "consumer": null,
  "service": null,
  "route": {
    "id": "b0db420a-d3c3-45ee-8b25-11f3fd8ca283"
  },
  "config": {
    "key_names": ["apikey"],
    "run_on_preflight": true,
    "anonymous": null,
    "hide_credentials": false,
    "key_in_body": false
  }
}

1.2 尝试访问

使用cURL:

curl -i http://172.16.60.8:8000/api/oss/
​
HTTP/1.1 401 Unauthorized
Date: Tue, 29 Dec 2020 02:20:20 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
WWW-Authenticate: Key realm="kong"
Content-Length: 45
X-Kong-Response-Latency: 30
Server: kong/2.2.1
​
{
  "message":"No API key found in request"
}

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

1.3创建用户

curl -i -X POST \
  --url http://172.16.60.8:8001/consumers/ \
  --data "username=Apiuser"
  
  
HTTP/1.1 201 Created
Date: Tue, 29 Dec 2020 02:26:39 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Content-Length: 119
X-Kong-Admin-Latency: 12
Server: kong/2.2.1
​
{
  "custom_id": null,
  "created_at": 1609208799,
  "id": "c469d8ad-723c-4c95-bbb1-f3a06ba74555",
  "tags": null,
  "username": "Apiuser"
}

1.4 为用户创建密钥

curl -i -X POST \
  --url http://172.16.60.8:8001/consumers/Apiuser/key-auth/ \
  --data 'key=xxzx@789'
  
HTTP/1.1 201 Created
Date: Tue, 29 Dec 2020 02:28:08 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Content-Length: 166
X-Kong-Admin-Latency: 11
Server: kong/2.2.1
​
{
  "created_at": 1609208888,
  "id": "315e4864-74a3-4fb9-910a-4b48909371f8",
  "tags": null,
  "ttl": null,
  "key": "xxzx@789",
  "consumer": {
    "id": "c469d8ad-723c-4c95-bbb1-f3a06ba74555"
  }
}

1.5 使用密钥访问测试

成功获取到数据

curl -i http://172.16.60.8:8000/api/oss/ -H 'apikey:xxzx@789'
HTTP/1.1 201 Created
Content-Type: application/json; charset=UTF-8
Content-Length: 299
Connection: keep-alive
Server: TornadoServer/5.1.1
Date: Tue, 29 Dec 2020 02:30:00 GMT
Access-Control-Allow-Methods: POST
Access-Control-Allow-Origin: *
X-Kong-Upstream-Latency: 5
X-Kong-Proxy-Latency: 18
Via: kong/2.2.1
​
{
  "requestId": "c00313f2-497d-11eb-a0c9-e6fb0f2261ab",
  "timestamp": "2020-12-29T10:30:00.609927",
  "status": 201,
  "data": "Welcome to use Go2cloud API OSS server. If you want to know about\n        more detail of API content. pls can connect our staff worker.\n        Thanks!\n        ",
  "path": "/"
}

2、Basic验证(basic-auth)

1、CLI配置

1、通过以下请求在服务上配置这个插件:

$ curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=basic-auth"  \
    --data "config.hide_credentials=true"

2、在路由上启用插件:

$ curl -X POST http://kong:8001/routes/{route_id}/plugins \
    --data "name=basic-auth"  \
    --data "config.hide_credentials=true"

2、konga管理平台配置

2.1 为路由添加basic-auth插件

微服务网关Kong - 身份验证

2.2 创建用户,并设置凭证

微服务网关Kong - 身份验证

微服务网关Kong - 身份验证

2.3 通过postman测试

微服务网关Kong - 身份验证

 

正文完
 
mervinwang
版权声明:本站原创文章,由 mervinwang 2020-12-29发表,共计3309字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
文章搜索