English | 中文

# 功能说明 `basic-auth`插件实现了基于 HTTP Basic Auth 标准进行认证鉴权的功能 # 配置字段 | 名称 | 数据类型 | 填写要求 | 默认值 | 描述 | | ----------- | --------------- | -------- | ------ | ---------------------------------------------------- | | `consumers` | array of object | 必填 | - | 配置服务的调用者,用于对请求进行认证 | | `_rules_` | array of object | 选填 | - | 配置特定路由或域名的访问权限列表,用于对请求进行鉴权 | `consumers`中每一项的配置字段说明如下: | 名称 | 数据类型 | 填写要求 | 默认值 | 描述 | | ------------ | -------- | -------- | ------ | ------------------------ | | `credential` | string | 必填 | - | 配置该consumer的访问凭证 | | `name` | string | 必填 | - | 配置该consumer的名称 | `_rules_` 中每一项的配置字段说明如下: | 名称 | 数据类型 | 填写要求 | 默认值 | 描述 | | ---------------- | --------------- | ------------------------------------------------- | ------ | -------------------------------------------------- | | `_match_route_` | array of string | 选填,`_match_route_`,`_match_domain_`中选填一项 | - | 配置要匹配的路由名称 | | `_match_domain_` | array of string | 选填,`_match_route_`,`_match_domain_`中选填一项 | - | 配置要匹配的域名 | | `allow` | array of string | 必填 | - | 对于符合匹配条件的请求,配置允许访问的consumer名称 | **注意:** - 若不配置`_rules_`字段,则默认对当前网关实例的所有路由开启认证; - 对于通过认证鉴权的请求,请求的header会被添加一个`X-Mse-Consumer`字段,用以标识调用者的名称。 # 配置示例 ## 对特定路由或域名开启认证和鉴权 以下配置将对网关特定路由或域名开启 Basic Auth 认证和鉴权,注意凭证信息中的用户名和密码之间使用":"分隔,`credential`字段不能重复 ```yaml # 使用 _rules_ 字段进行细粒度规则配置 consumers: - credential: 'admin:123456' name: consumer1 - credential: 'guest:abc' name: consumer2 _rules_: # 规则一:按路由名称匹配生效 - _match_route_: - route-a - route-b allow: - consumer1 # 规则二:按域名匹配生效 - _match_domain_: - "*.example.com" - test.com allow: - consumer2 ``` 此例 `_match_route_` 中指定的 `route-a` 和 `route-b` 即在创建网关路由时填写的路由名称,当匹配到这两个路由时,将允许`name`为`consumer1`的调用者访问,其他调用者不允许访问; 此例 `_match_domain_` 中指定的 `*.example.com` 和 `test.com` 用于匹配请求的域名,当发现域名匹配时,将允许`name`为`consumer2`的调用者访问,其他调用者不允许访问。 ### 根据该配置,下列请求可以允许访问: **请求指定用户名密码** ```bash # 假设以下请求将会匹配到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** ```bash curl http://xxx.hello.com/test ``` **请求提供的用户名密码错误,返回401** ```bash curl -u admin:abc http://xxx.hello.com/test ``` **根据请求的用户名和密码匹配到的调用者无访问权限,返回403** ```bash # consumer2不在route-a的allow列表里 curl -u guest:abc http://xxx.hello.com/test ``` ## 网关实例级别开启 以下配置未指定`_rules_`字段,因此将对网关实例级别开启 Basic Auth 认证 ```yaml consumers: - credential: 'admin:123456' name: consumer1 - credential: 'guest:abc' name: consumer2 ``` # 相关错误码 | HTTP 状态码 | 出错信息 | 原因说明 | | ----------- | ------------------------------------------------------------------------------ | ---------------------- | | 401 | Request denied by Basic Auth check. No Basic Authentication information found. | 请求未提供凭证 | | 401 | Request denied by Basic Auth check. Invalid username and/or password | 请求凭证无效 | | 403 | Request denied by Basic Auth check. Unauthorized consumer | 请求的调用方无访问权限 |