消费者
在本文档中,你将了解 API7 企业版中消费者(Consumers)的基本概念以及为什么需要它们。你将接触到几个相关的概念,包括 如何将消费者信息传递给上游、消费者访问限制,以及消费者的身份验证和授权。
概述
消费者代表向 API 网关发送请求并使用后端服务的用户、应用程序或主机。它通常与身份验证系统一起使用。每个消费者必须配置至少一个身份验证凭证,或者使用如 Authz Keycloak 或 OpenID Connect 等插件与外部身份验证系统集成。
下图展示了包含一个路由和两个消费者的 API7 网关示例。其中一个消费者 FetchBot 是一个数据抓取机器人,另一个消费者 JohnDoe 是一名用户。路由和消费者都启用了 key-auth 插件。因此,请求将使用 API 密钥(API keys)进行身份验证。为了访问内部服务,FetchBot 使用 bot-key 发送请求,而 JohnDoe 使用 john-key 发送请求。

这种配置确保了只有经过身份验证的请求才能与暴露在 /petstore 上的内部服务进行交互。
- 如果向 API7 网关发送的请求没有携带任何密钥或携带了错误的密钥,该请求将被拒绝。
- 如果向 API7 网关发送的请求携带了
bot-key,该请求将通过身份验证,并被识别为由FetchBot发送以从内部服务抓取数据。此时,应用在FetchBot消费者上的 Limit Count 插件将生效,将 5 秒窗口内的请求数量限制为2次。如果未达到限流阈值,请求将被转发到上游服务;否则,将被拒绝。 - 如果向 API7 网关发送的请求携带了
john-key,该请求将通过身份验证,并被识别为由JohnDoe发送,随后将被转发到上游端点。
在这个场景中,根据插件的执行生命周期,身份验证插件会在 Limit Count 限流插件之前执行。
将消费者信息传递给上游
对于某些使用场景(如日志记录、分析和审计),你可能希望将消费者信息传递给上游服务。默认情况下,消费者信息不会暴露给上游;但是,你可以使用 Attach Consumer Label 插件将所需信息包含在请求头中。
消费者访问限制
你可以通过 Consumer Restriction 插件,基于消费者名称、HTTP 方法或其他参数施加限制,从而控制对你 API 的访问请求。
例如,如果你想在不更改任何消费者配置的情况下,将 FetchBot 列入黑名单以禁止其访问你的内部服务,请参考应用基于名单的访问控制。