名字

basic-auth 是一个认证插件,它需要与 consumer 一起配合才能工作。

添加 Basic Authentication 到一个 serviceroute。 然后 consumer 将其用户名和密码添加到请求头中以验证其请求。

有关 Basic Authentication 的更多信息,可参考 维基百科 查看更多信息。

属性

  • username: 不同的 consumer 对象应有不同的值,它应当是唯一的。不同 consumer 使用了相同的 username ,将会出现请求匹配异常。
  • password: 用户的密码

如何启用

1. 创建一个 consumer 对象,并设置插件 basic-auth 的值。

  1. curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "username": "foo",
  4. "plugins": {
  5. "basic-auth": {
  6. "username": "foo",
  7. "password": "bar"
  8. }
  9. }
  10. }'

你可以使用浏览器打开 dashboard:http://127.0.0.1:9080/apisix/dashboard/,通过 web 界面来完成上面的操作,先增加一个 consumer: auth-1

然后在 consumer 页面中添加 basic-auth 插件: auth-2

2. 创建 Route 或 Service 对象,并开启 basic-auth 插件。

  1. curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "methods": ["GET"],
  4. "uri": "/hello",
  5. "plugins": {
  6. "basic-auth": {}
  7. },
  8. "upstream": {
  9. "type": "roundrobin",
  10. "nodes": {
  11. "127.0.0.1:8080": 1
  12. }
  13. }
  14. }'

Test Plugin

  • 缺少 Authorization header
  1. $ curl http://127.0.0.2:9080/hello -i
  2. HTTP/1.1 401 Unauthorized
  3. ...
  4. {"message":"Missing authorization in request"}
  • 用户名不存在:
  1. $ curl -i -ubar:bar http://127.0.0.1:9080/hello
  2. HTTP/1.1 401 Unauthorized
  3. ...
  4. {"message":"Invalid user key in authorization"}
  • 密码错误:
  1. $ curl -i -ufoo:foo http://127.0.0.1:9080/hello
  2. HTTP/1.1 401 Unauthorized
  3. ...
  4. {"message":"Password is error"}
  5. ...
  • 成功请求:
  1. $ curl -i -ufoo:bar http://127.0.0.1:9080/hello
  2. HTTP/1.1 200 OK
  3. ...
  4. hello, foo!
  5. ...

禁用插件

当你想去掉 basic-auth 插件的时候,很简单,在插件的配置中把对应的 json 配置删除即可,无须重启服务,即刻生效:

  1. $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "methods": ["GET"],
  4. "uri": "/hello",
  5. "plugins": {},
  6. "upstream": {
  7. "type": "roundrobin",
  8. "nodes": {
  9. "127.0.0.1:8080": 1
  10. }
  11. }
  12. }'