概述
基本身份认证(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
- 上游请求头
在启用基本身份证认证插件之后,当客户端通过身份验证后,插件会在请求被代理到上游服务之前附加一些请求头信息,这样你就可以在代码中识别消费者:
- X-Consumer-ID:Kong中消费者的ID。
- X-Consumer-Custom-ID:Kong中消费者的custom_id(如果消费者设置了此值)。
- X-Consumer-Username:Kong中消费者的username(如果消费者设置了此值)。
- X-Credential-Identifier:凭证的标识符(只要消费者不是“匿名”消费者时有效)。
- 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(基本身份认证)插件参数介绍
- name(必须):插件的名称,值为basic-auth。数据类型:string。
- service.id(半可选,即:与route.id两者有一个必须):插件目标服务的ID(通过管理api配置时指定)。数据类型:string。
- route.id(半可选,即:与service.id两者有一个必须):插件目标路由的ID(通过管理api配置时指定)。数据类型:string。
- enabled(必须):是否应用此插件。数据类型:boolean,默认值:true。
- config.hide_credentials(可选):插件显示或隐藏来自上游服务的凭据。如果值为true,插件将在代理之前从请求中删除凭证(即授权相关的请求头),即是否把客户端请求头中的认证凭证(Proxy-Authorization或Authorization)发送至后端服务。数据类型:boolean,默认值:false。
- 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可以维护一个也可以两者都维护,只要其中一个正确既可以。