kong插件应用(二)

key-auth

配置密钥验证插件

要为您在Kong中配置的service配置key-auth插件,请发出以下CURL请求:

$ curl -i -X POST \
  --url http://localhost:8001/services/example-service/plugins/ \
  --data 'name=key-auth'

注意:此插件还接受一个config.key_names参数,默认为['apikey']。它是应该在请求期间包含apikey的标头和参数名称(均受支持)的列表。

确认插件配置正确

发出以下cURL请求,以验证是否 在服务上正确配置了key-auth插件:

$ curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: example.com'

由于您未指定所需的apikey标头或参数,因此响应应为401 Unauthorized

HTTP/1.1 401 Unauthorized
...

{
  "message": "No API key found in request"
}

由上我们已经成功配置了key-auth 插件,我们还需要将消费者cunsumer添加到服务中,以便继续通过Kong代理请求。

如果对Cunsumer的概念不清楚,请参考官网 consumer-object

创建cunsumer

让我们创建一个Jason通过发出以下请求命名的用户:

$ curl -i -X POST \
  --url http://localhost:8001/consumers/ \
  --data "username=Jason" \
  --data "custom_id=Jason"

注意custom_id在创建使用者以将使用者与现有用户数据库相关联时,Kong还接受参数。

给cunsumer提供关键凭证

现在,我们可以Jason通过发出以下请求为最近创建的使用者创建密钥:

$ curl -i -X POST \
  --url http://localhost:8001/consumers/Jason/key-auth/ \
  --data 'key=123456'

或者

$ curl -i -X GET \
  --url http://localhost:8001/consumers/Jason/key-auth?apikey=123456 \

basic-auth

Basic插件和key-auth插件的启用基本相同, 都可以安装配置在Service或者Route上,

Route上启用插件

$ curl -X POST http://localhost:8001/routes/6dc2a722-3e71-4e17-8917-6271f3271d96/plugins \
    --data "name=basic-auth" \
    --data "config.hide_credentials=true"

创建一个Consumer

$ curl -i -X POST \
  --url http://localhost:8001/consumers/ \
  --data "username=basic-user" \
  --data "custom_id=basic-01"

为Consumer创建凭证

$ curl -X POST http://localhost:8001/consumers/basic-user/basic-auth \
  --data "username=zhangsan" \
  --data "password=123abc"

验证凭证

授权头必须时由Base64编码加密的。

例如,凭证用户为“zhangsan,密码为“123abc”,那么加密凭证就是zhangsan:123abc的Base64编码,即 QWxhZGRpbjpPcGVuU2VzYW1l。

$ curl -i -X GET \
  --url http://localhost:8000/request/ \
  --header "Host: example.com" \
  --header 'Authorization: Basic emhhbmdzYW46MTIzYWJj'

当使用浏览器访问时,需要提供正确的用户凭证,否则将被拒绝访问:401 message "Invalid authentication credentials"

ACL 用户鉴权

上节提到,认证插件启用后,任何具有有效凭证的用户都可以访问Kong API。

但实际环境中,我只想要指定的用户可以访问API,这时候就需要借助ACL插件进行访问控制。
即:控制哪些Comsumers可以访问API。

在route上启用ACL鉴权插件

为了方便测试,我们还是在route上启用插件。(测试route_id 6dc2a722-3e71-4e17-8917-6271f3271d96)

$ curl -X POST http://localhost:8001/routes/{route_id}/plugins \
    --data "name=acl" \
    --data "config.whitelist=group1" \
    --data "config.hide_groups_header=true"

可以看到,我们在上面的route上添加ACL插件,并设置了"config.whitelist=group1, group2",意思就是说:在启用了ACL插件后,只有在白名单里的group1, group2组的comsuner,才可以访问这个route。

我们继续往下看,在上节文章中,我们在route上启用了basic-auth,并且已经实现访问认证,但是在同一route上又添加了ACL后,我们不能访问这个服务了,这时就是ACL鉴权白名单起了作用,所有consumers都被禁止访问了,它们都没有再ACL鉴权白名单中。

关联comsumer

$ curl -X POST http://localhost:8001/consumers/basic-user/acls \
    --data "group=group1"

Basic auth 与ACL 的总结

利用basic-auth以及acl插件,我们能够对API接口访问进行有效控制

  • ACL:首先需要通过ACL鉴权的用户,才有资格进行API访问认证
  • Basic auth:通过了ACL鉴权的用户,需要携带正确的用户凭证,才能正常访问API
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇