介绍
在和upstream的service通信时会受到应用和配置的各种各样的kong的authentication插件的控制。并且kong的Service和upstream service是一一对应的,所以最简单的鉴权的做法就是给你的Service配置authentication插件。
Generic authentication
最简单通用的场景是使用一个authentication插件来实现鉴权,通常的步骤如下:
- 为Service 或 全局 申请一个auth plugin。(不能为一个consumer创建插件)
- 创建一个consumer实体。
- 为制定的鉴权方法,给consumer提供一个鉴权证书
- 全部请求都到kong后,会验证它提供的证书,如果正确kong会在header中添加consumer和证书信息并转发请求。
Consumer
consumer的核心原则是用户可以把plugin和consumer绑定,可以使用此功能自定义请求的行为。比如我们有很多的app,可以给每个app定义一个consumer、或者每个版本一个consumer、或者每种平台一个consumer(比如android、ios等)
匿名访问
kong支持一个Service即提供authenticated访问方式,也提供匿名访问方式。用户可以使用该功能给匿名用户一个低速率访问权限、给授权用户一个高速访问权限。
配置上述服务额步骤如下:
1. 创建一个Service和Route
//创建服务
$ curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org/request'
//创建route
$ curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'paths[]=/auth-sample'
2. 为服务创建key-auth插件
$ curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=key-auth'3. 验证key-auth是否生效
curl -i -X GET \
--url http://localhost:8000/auth-sample
返回为:
HTTP/1.1 403 Forbidden
...
{
"message": "No API key found in headers or querystring"
}
4. 创建一个匿名用户
$ curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=anonymous_users"5. 允许匿名访问
重新配置key-auth插件,使其允许匿名访问
$ curl -i -X PATCH \
--url http://localhost:8001/plugins/f91b52e1-26e6-4c7a-af22-767b940f1162 \
--data "config.anonymous=af6dcf67-5aa7-42e8-8f94-9912a66a0627"此时在使用第3步的方法访问即可验证匿名访问已生效。
Multiple Authentication
kong支持给一个服务多种鉴权插件,允许不同的客户端使用不同的鉴权方法访问指定service\route。