kong插件应用(二)
key-auth
配置密钥验证插件
要为您在Kong中配置的service
配置key-auth插件,请发出以下CURL请求:
1 |
|
注意:此插件还接受一个config.key_names
参数,默认为['apikey']
。它是应该在请求期间包含apikey的标头和参数名称(均受支持)的列表。
确认插件配置正确
发出以下cURL请求,以验证是否 在服务上正确配置了key-auth插件:
1 |
|
由于您未指定所需的apikey
标头或参数,因此响应应为401 Unauthorized
:
1 |
|
由上我们已经成功配置了key-auth 插件,我们还需要将消费者cunsumer添加到服务中,以便继续通过Kong代理请求。
如果对Cunsumer的概念不清楚,请参考官网 consumer-object
创建cunsumer
让我们创建一个Jason通过发出以下请求命名的用户:
1 |
|
注意:custom_id
在创建使用者以将使用者与现有用户数据库相关联时,Kong还接受参数。
给cunsumer提供关键凭证
现在,我们可以Jason通过发出以下请求为最近创建的使用者创建密钥:
1 |
|
或者
1 |
|
basic-auth
Basic插件和key-auth插件的启用基本相同, 都可以安装配置在Service或者Route上,
Route上启用插件
1 |
|
创建一个Consumer
1 |
|
为Consumer创建凭证
1 |
|
验证凭证
授权头必须时由Base64编码加密的。
例如,凭证用户为“zhangsan,密码为“123abc”,那么加密凭证就是zhangsan:123abc
的Base64编码,即 QWxhZGRpbjpPcGVuU2VzYW1l。
1 |
|
当使用浏览器访问时,需要提供正确的用户凭证,否则将被拒绝访问:401 message "Invalid authentication credentials"
ACL 用户鉴权
上节提到,认证插件启用后,任何具有有效凭证的用户都可以访问Kong API。
但实际环境中,我只想要指定的用户可以访问API,这时候就需要借助ACL
插件进行访问控制。
即:控制哪些Comsumers可以访问API。
在route上启用ACL鉴权插件
为了方便测试,我们还是在route上启用插件。(测试route_id 6dc2a722-3e71-4e17-8917-6271f3271d96)
1 |
|
可以看到,我们在上面的route上添加ACL插件,并设置了"config.whitelist=group1, group2"
,意思就是说:在启用了ACL插件后,只有在白名单里的group1, group2组的comsuner,才可以访问这个route。
我们继续往下看,在上节文章中,我们在route上启用了basic-auth
,并且已经实现访问认证,但是在同一route上又添加了ACL
后,我们不能访问这个服务了,这时就是ACL鉴权白名单起了作用,所有consumers都被禁止访问了,它们都没有再ACL鉴权白名单中。
关联comsumer
1 |
|
Basic auth 与ACL 的总结
利用basic-auth以及acl插件,我们能够对API接口访问进行有效控制
- ACL:首先需要通过ACL鉴权的用户,才有资格进行API访问认证
- Basic auth:通过了ACL鉴权的用户,需要携带正确的用户凭证,才能正常访问API