kong-Authentication

1,886 阅读2分钟

介绍

在和upstream的service通信时会受到应用和配置的各种各样的kong的authentication插件的控制。并且kong的Service和upstream service是一一对应的,所以最简单的鉴权的做法就是给你的Service配置authentication插件。

Generic authentication

最简单通用的场景是使用一个authentication插件来实现鉴权,通常的步骤如下:

  1. 为Service 或 全局 申请一个auth plugin。(不能为一个consumer创建插件)
  2. 创建一个consumer实体。
  3. 为制定的鉴权方法,给consumer提供一个鉴权证书
  4. 全部请求都到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。