Basic 认证

功能说明

basic-auth 插件实现了基于 HTTP Basic Auth 标准进行认证鉴权的功能。

配置字段

全局配置

名称数据类型填写要求默认值描述
consumersarray of object必填-配置服务的调用者,用于对请求进行认证
global_authbool选填-若配置为 true,则全局生效认证机制; 若配置为 false,则只对做了配置的域名和路由生效认证机制; 若不配置则仅当没有域名和路由配置时全局生效(兼容机制)

consumers 中每一项的配置字段说明如下:

名称数据类型填写要求默认值描述
credentialstring必填-配置该 consumer 的访问凭证
namestring必填-配置该 consumer 的名称

域名和路由级配置

名称数据类型填写要求默认值描述
allowarray of string必填-对于符合匹配条件的请求,配置允许访问的 consumer 名称

注意:

  • 对于通过认证鉴权的请求,请求的 header 会被添加一个 X-Mse-Consumer 字段,用以标识调用者的名称。

配置示例

对特定路由或域名开启认证和鉴权

以下配置将对网关特定路由或域名开启 Basic Auth 认证和鉴权,注意凭证信息中的用户名和密码之间使用 ”:” 分隔,credential 字段不能重复

全局配置

  1. consumers:
    - credential: admin:123456
    name: consumer1
    - credential: guest:abc
    name: consumer2
    global_auth: false

路由级配置

对 route-a 和 route-b 这两个路由做如下配置:

  1. allow:
    - consumer1

对 *.example.com 和 test.com 在这两个域名做如下配置:

  1. allow:
    - consumer2

若是在控制台进行配置,此例指定的 route-aroute-b 即在控制台创建路由时填写的路由名称,当匹配到这两个路由时,将允许 nameconsumer1 的调用者访问,其他调用者不允许访问;

此例指定的 *.example.comtest.com 用于匹配请求的域名,当发现域名匹配时,将允许 nameconsumer2 的调用者访问,其他调用者不允许访问。

根据该配置,下列请求可以允许访问。

请求指定用户名密码。

  1. # 假设以下请求将会匹配到 route-a 路由
    # 使用 curl 的 -u 参数指定
    curl -u admin:123456 http://xxx.hello.com/test
    # 或者直接指定 Authorization 请求头,用户名密码使用 base64 编码
    curl -H ‘Authorization: Basic YWRtaW46MTIzNDU2’ http://xxx.hello.com/test

认证鉴权通过后,请求的 header 中会被添加一个 X-Mse-Consumer 字段,在此例中其值为 consumer1,用以标识调用方的名称

下列请求将拒绝访问。

请求未提供用户名密码,返回 401。

请求提供的用户名密码错误,返回401。

  1. curl -u admin:abc http://xxx.hello.com/test

根据请求的用户名和密码匹配到的调用者无访问权限,返回 403。

  1. # consumer2 不在 route-a 的 allow 列表里
    curl -u guest:abc http://xxx.hello.com/test

相关错误码

HTTP 状态码出错信息原因说明
401Request denied by Basic Auth check. No Basic Authentication information found.请求未提供凭证
401Request denied by Basic Auth check. Invalid username and/or password请求凭证无效
403Request denied by Basic Auth check. Unauthorized consumer请求的调用方无访问权限