专栏首页Kubernetes手记微服务网关Kong系列文章之五:身份验证
原创

微服务网关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插件

image-20201229104412251

2.2 创建用户,并设置凭证

image-20201229103436492
image-20201229103450316

2.3 通过postman测试

image-20201229104427484

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务网关Kong系列文章之四:Kong代理

    8000:此端口是Kong用来监听来自客户端的HTTP请求的,并将此请求转发到您的上游服务。这也是本教程中最主要用到的端口。

    Honest1y
  • 微服务网关Kong系列文章之二:Kong安装

    如我们在术语部分的介绍,服务是上游服务的抽象,可以是一个应用,或者具体某个接口。Kong 提供了管理接口,我们可以通过请求 8001 管理接口直接创建,也可以通...

    Honest1y
  • 微服务网关Kong系列文章之六:安全

    Honest1y
  • 微服务网关Kong系列文章之一:简介

    当使用单体应用程序架构时,客户端(Web 或移动端)通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一...

    Honest1y
  • 微服务网关Kong系列文章之三:Konga安装

    Honest1y
  • 微服务网关Kong系列文章之七:流量控制

    Honest1y
  • 微服务架构之「 API网关 」

    在微服务架构的系列文章中,前面已经通过文章《架构设计之「服务注册 」》介绍过了服务注册的原理和应用,今天这篇文章我们来聊一聊「 API网关 」。

    奎哥
  • 微服务架构之「 API网关 」

    在微服务架构的系列文章中,前面已经通过文章《架构设计之「服务注册 」》介绍过了服务注册的原理和应用,今天这篇文章我们来聊一聊「 API网关 」。

    Bug开发工程师
  • Kong 1.3 发布:原生 gRPC 代理、上游 TLS 交叉认证

    Kong 1.3 发布了,此版本亮点包括支持原生 gRPC 代理、上游 TLS 交叉认证,以及一系列新功能和性能改进。

    Debian中国
  • 来自骷髅岛的 Ingress Controller:Kong

    Kong,是一个在 Nginx 反向代理基础上发展而来的 API 网关产品。我之前一直在推动的 Service Mesh,主要关注的是集群(Mesh)内微服务之...

    崔秀龙
  • 微服务网关方案:Kong & Nacos

    文章连接:https://mp.weixin.qq.com/s/Kk6Cl7n0sFGgCyyZtExa6A

    程序员架构进阶
  • 云原生架构下的 API 网关实践:Kong (一)

    ,有点懒怠。最近抽空捣鼓了 Kong 网关的使用实践,微服务网关之前的文章也写过,读者可以翻看之前的文章推送。插件是 Kong 扩展的重要特性,这次除了会介绍 ...

    aoho求索
  • 微服务网关方案:Kong & Nacos

    前面我们介绍了 Spring Cloud 体系下的网关 Gateway(Zuul)。事实上,还有很多开源且广泛应用的网关方案,例如 Kong 和 Nacos。本...

    程序员架构进阶
  • 微服务API网关-Kong初探

    Kong是一个clould-native、快速的、可扩展的、分布式的微服务抽象层(也称为API网关、API中间件或在某些情况下称为服务网格)框架。更确切地说,K...

    KaliArch
  • 云原生架构下的 API 网关实践:Kong (三)

    在前面的文章介绍了 Kong 的相关实践,本文将会介绍 Kong 的利器:插件以及自定义插件。

    aoho求索
  • 又肝了下微服务 API 网关“金刚”,也是蛮香的~

    Kong 是由 Mashape 公司开源的云原生、高性能、可扩展的微服务 API 网关。它基于 OpenResty 实现,使用 Cassandra 或 Post...

    芋道源码
  • Kong 集成 Jwt 插件

    上一篇文章使用 Kong 完成了负载均衡的配置,本文介绍下在此基础上如何集成 jwt 插件来保护内部服务的安全。前置知识点:Jwt 基础概念。推荐阅读: 通俗...

    kirito-moe
  • 开源API网关,到底哪个强?

    本文主要分析了 Nginx、Kong、APISIX、Tyk、Zuul、Gravitee 几个开源 API 网关架构及基本功能,测试了一定场景下各个 API 网关...

    Java识堂
  • 国产最强开源 API 网关,没有之一,不接受任何反驳!

    来源:https://zhuanlan.zhihu.com/p/358862217 强烈推荐大家试试国产开源的 API 网关 https://github.co...

    用户1516716

扫码关注云+社区

领取腾讯云代金券