Kong认证插件Basic Authentication详解

概述

基本身份认证(Basic Authentication):通过用户名和密码向服务或路由添加保护功能。该插件将按照Proxy-Authorization和Authorization的先后顺序检查对应的请求头中的凭证的有效性。

该示例配置内容如下:

  • kong的代理信息

IP地址:192.168.0.90(根据自己的部署情况调整为自己的ip)

代理服务端口:80、443(根据自己的部署情况调整为自己的端口)

  • 后端服务

地址:
http://192.168.1.196/basicauth(根据实际情况,自己定义)

浏览访问效果:


  • Kong管理API工具

konga作为示例配置kong的管理工具。关于konga 的安装请参考,Linux 下源码安装Kong管理工具konga

访问地址:http://192.168.0.90:1337

  • 上游请求头

在启用基本身份证认证插件之后,当客户端通过身份验证后,插件会在请求被代理到上游服务之前附加一些请求头信息,这样你就可以在代码中识别消费者:

  1. X-Consumer-ID:Kong中消费者的ID。
  2. X-Consumer-Custom-ID:Kong中消费者的custom_id(如果消费者设置了此值)。
  3. X-Consumer-Username:Kong中消费者的username(如果消费者设置了此值)。
  4. X-Credential-Identifier:凭证的标识符(只要消费者不是“匿名”消费者时有效)。
  5. X-Anonymous-Consumer:基本身份认证中设置了匿名的消费者,在客服端认证失败是,此值为true。

您可以使用以上信息来实现相关的业务逻辑。您可以使用X-Consumer-ID值来获取有关该消费者的更多信息。

创建服务及路由

  • 创建服务

通过konga的管理菜单SERVICES,添加一个服务。


维护对应的name及url即可。其中url的地址为http://192.168.1.196/。

  • 创建路由

通过konga的管理菜单SERVICES,可以看到上面添加的“
basic-authentication-example”服务。然后点击此服务,进入服务的详情页面。


在服务的详情页面点击左侧导航的“Routes”,进行服务下路由的管理操作,按如下操作创建一个新路由。


把属性Paths设置为/basicauth然后回车(记得一定要回车,不然值添加不上),Path handling设置v0,Strip Path设置:NO,这些属性的详解,请参考Kong 管理API详解之八——路由对象

已上操作完成之后,即完成了一个通过路由代理转发后端服务的配置。可以通过上面提供的kong代理服务的信息访问代理后的效果地址为:http(s)://192.168.0.90/basicauth。


可以看到跟直接访问后端服务页面效果一样。

在服务或路由上添加插件Basic Authentication(基本身份认证)

根据实际场景选择是在服务或路由上添加插件,只是插件作用域的范围不一样,如果在服务上添加插件,则对服务下的所有路由都生效。如果在路由上添加插件,则只作用该路由本身。该示例演示通过在路由上添加插件。

  • Basic Authentication(基本身份认证)插件参数介绍
  1. name(必须):插件的名称,值为basic-auth。数据类型:string。
  2. service.id(半可选,即:与route.id两者有一个必须):插件目标服务的ID(通过管理api配置时指定)。数据类型:string。
  3. route.id(半可选,即:与service.id两者有一个必须):插件目标路由的ID(通过管理api配置时指定)。数据类型:string。
  4. enabled(必须):是否应用此插件。数据类型:boolean,默认值:true。
  5. config.hide_credentials(可选):插件显示或隐藏来自上游服务的凭据。如果值为true,插件将在代理之前从请求中删除凭证(即授权相关的请求头),即是否把客户端请求头中的认证凭证(Proxy-Authorization或Authorization)发送至后端服务。数据类型:boolean,默认值:false。
  6. config.anonymous(可选):一个可选的字符串(消费者uuid)值,在身份验证失败时用作“匿名”的消费者。如果为空,在请求将失败时,身份验证失败则提示4xx相关内容。请注意,这个值必须引用Kong内部的消费者id属性,而不是它的custom_id。数据类型:string。默认值:空。其中与ACL插件两者二选一。
  • 在路由上添加插件

通konga菜单ROUTES可以获取所有路由的列表,找到刚才添加的路由。然后点击进去可以看到该路由的详情页面。


通过该路由左侧的导航菜单中的“Plugins”管理该路由的插件。通过添加插件,选择插件导航中的“Authentication”,然后选择其列表中的“Basic Authentication”,不用填写任何内容直接添加即可。这样就完成了基本身份证认证插件的添加操作。

添加完成之后可以看到插件列表里面包含了此插件。



当您再次访问http(s)://192.168.0.90/basicauth,会弹出让您进行身份证认证的窗口。


此时需要输入有效的用户名及密码才能访问。即需要为该插件配置对应的认证凭证。而有效认证凭证信息是需要通过安全插件的ACL插件进行添加。

  • 维护及配置认证凭证(消费者)

1.添加消费者

通过konga的菜单CONSUMERS,添加一个消费者。


在属性usernamne中输入consumers,然后添加即可。

消费者参数介绍

username(半可选即:与custom_id两者有一个必须):消费者的用户名。

custom_id(半可选即:与username两者有一个必须):用于将使用者映射到另一个数据库的自定义标识符。

2.添加消费者下工作组

在消费者详情页面上面的导航中点击“Groups”,添加工作组。


在Group name 属性值中输入工作组名称:consumer_group,一定要记住此工作组的名称,作为后面维护ACL插件时使用。

3.添加消费者下面的基本身份认证的凭证

在消费者详情页面上面的导航中点击“Credentials”,然后通过左侧导航中的BASIC完成基本身份证认证凭证的添加操作。


添加认证凭证。


记住这里维护的用户名basic,密码123456作为后面访问弹出的认证窗口的凭证。

4.通过插件ACL为路由添加认证凭证

进入上面维护的路由的详情中的路由列表,添加ACL插件。选择插件导航中的“Security”,然后选择其列表中的Acl。


维护Acl插件信息。


在allow的属性上输入上面维护的消费者下工作组的名称consumer_group回车即可。

然后再次访问http(s)://192.168.0.90/basicauth。在弹出的窗口中输入维护的认证凭证信息,用户名basic及密码123456。既可以出现如下页面。说明通过了有效的验证。


至此完成了基本认证验证配置。

5.Postman模拟浏览器请求认证实现


通过在请求头中的Proxy-Authorization或Authorization设置认证凭证。其值为:用户名+英文空格+base64编码的内容(编码内容为:用户:密码,其中用户名跟密码直接是英文的冒号)。

其中请求头中的Proxy-Authorization、Authorization可以维护一个也可以两者都维护,只要其中一个正确既可以。

原文链接:,转发请注明来源!