跳到主要内容
版本:3.10.x

消费者

本文介绍 API7 企业版中消费者(Consumer)的基本概念和使用场景,包括如何将消费者信息传递到上游、限制消费者访问,以及对消费者进行身份认证和授权。

概述

消费者代表向 API 网关发送请求并使用后端服务的用户、应用或主机。消费者通常与身份认证系统配合使用。每个消费者必须配置至少一个身份认证凭证,或通过 Authz KeycloakOpenID Connect 等插件与外部身份认证系统集成。

下图展示了包含一个路由和两个消费者的 API7 网关示例。其中,FetchBot 是数据抓取机器人,JohnDoe 是用户。路由和消费者均启用了 key-auth 插件,因此请求会使用 API Key(API 密钥)进行身份认证。访问内部服务时,FetchBot 使用 bot-keyJohnDoe 使用 john-key


路由通过身份认证插件识别两个消费者

此配置确保只有完成身份认证的请求才能访问 /petstore 上的内部服务。

  • 如果向 API7 网关发送的请求没有携带任何密钥或携带了错误的密钥,该请求将被拒绝。
  • 如果请求携带 bot-key,则会通过身份认证并被识别为来自 FetchBot。应用于 FetchBotLimit Count 插件会生效,将 5 秒内的请求数限制为 2。未达到限流阈值时,请求会转发到上游服务;否则,请求会被拒绝。
  • 如果请求携带 john-key,则会通过身份认证并被识别为来自 JohnDoe,随后转发到上游端点。

在此场景中,根据插件执行顺序,身份认证插件会在 Limit Count 限流插件之前执行。

将消费者信息传递给上游

对于某些使用场景(如日志记录、分析和审计),你可能希望将消费者信息传递给上游服务。默认情况下,消费者信息不会暴露给上游;但是,你可以使用 Attach Consumer Label 插件将所需信息包含在请求头中。

消费者访问限制

你可以通过 Consumer Restriction 插件,基于消费者名称、HTTP 方法或其他参数施加限制,从而控制对你 API 的访问请求。

例如,如果你想在不更改消费者配置的情况下,将 FetchBot 列入黑名单以禁止其访问内部服务,请使用 Consumer Restriction 插件。

身份认证与授权

在基于 API7 网关的架构中,身份认证和授权主要有两种设计模式。

第一种也是最常用的方法是,通过第三方身份提供商(IdP)(例如 Keycloak)对请求进行身份认证和授权:

API7 网关与身份提供商集成

如果同一路由或服务需要接受多种身份认证方式,请配置 multi-auth 插件。不同消费者可分别使用对应的消费者凭证;请求通过任一已配置的身份认证方式即可放行。每个消费者凭证只能包含一个身份认证插件。

第二种方法是在 API7 网关上直接使用内置凭证进行身份认证和授权。目前支持 key-authbasic-authjwt-authhmac-auth 凭证。

与传统用户登录类似,每个消费者可以创建多个凭证,所有凭证都链接到一个统一的消费者身份。凭证应妥善保存并定期更新。

备注

消费者凭证(Consumer Credential)允许每个消费者拥有多种凭证,并将 key-authbasic-authjwt-authhmac-auth 的凭证配置作为独立对象关联到消费者,从而简化凭证管理。

开发者与消费者的对比

API 开发者门户上的开发者也可以管理 API 凭证并通过订阅使用访问控制,但两者通常适用于不同的场景。

开发者(Developer)消费者(Consumer)
凭证由开发者自行管理,对提供者不可见由提供者管理
API 访问控制开发者申请访问权限,提供者审批订阅。提供者可以直接将消费者添加或移除出白名单/黑名单。

开发者和消费者可以同时用于不同的 API,两者独立运行。但是,对于指定服务及其关联的 API 产品,应选择使用 API7 网关身份认证插件或 API 产品身份认证配置之一。

对于私有服务,通过 API7 网关内的消费者管理来限制访问。对于公共服务,将它们分组为明确定义的 API 产品,并通过 API 产品配置来管理开发者的访问权限。

除非存在特殊需求,否则不建议为同一个服务同时使用 API7 网关身份认证插件和 API 产品身份认证配置。两者同时启用可能导致身份认证冲突,要求调用方提供多组凭证才能成功发起 API 请求。

更多资源