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

应用基于列表的访问控制

有时,相比认证插件提供的功能,你可能需要更精确的访问控制。例如,你可能希望维护一个可以访问你的 API 的消费者(Consumers)白名单。这样,消费者必须发送经过身份验证的请求,并且在白名单中(且不在黑名单中)才能访问该 API。

备注

在实施基于消费者的访问控制之前,请考虑 API 开发者门户(API Portal) 是否是更好的解决方案。

本教程将指导你如何通过 consumer-restriction 插件创建消费者白名单,从而配置精确的访问控制。

前置条件

  1. 安装 API7 企业版
  2. 拥有一个已启用 key-auth 的路由
  3. 拥有一个带有凭证的消费者 alice

应用消费者白名单

当消费者发起认证请求时,API7 网关会将消费者名称传递给路由。因此,路由不需要直接访问消费者的凭据,这更加用户友好。

  1. 从侧边导航栏选择你的网关组的 已发布服务(Published Services),然后选择你想要配置的服务,例如,版本为 1.0.0httpbin
  2. 从侧边导航栏选择 插件(Plugins),然后点击 添加插件(Add Plugin)
  3. 搜索 Consumer Restriction 插件,然后点击 添加(Add)
  4. 在对话框中,执行以下操作:
  • 将以下配置添加到 JSON 编辑器(JSON Editor)

    {
    "whitelist": [
    "Alice"
    ]
    }

    如果你遵循了前置条件的教程,你应该已经有了一个拥有密钥认证凭证的消费者 Alice

  • 点击 添加(Add)

  1. 创建一个拥有密钥认证凭证的新消费者 Lisa,其 Keylisa-key

验证

作为消费者 Alice 向服务发起请求:

curl -i "http://127.0.0.1:9080/ip" -H "apikey: alice-primary-key" 

你会看到请求成功并返回 200 OK 响应,因为消费者 Alice 在白名单中。

现在,作为新创建的消费者 Lisa 向服务发起请求:

curl -i "http://127.0.0.1:9080/ip" -H "apikey: lisa-key" 

因为消费者 Lisa 没有被添加到白名单中,你将收到一个 403 Forbidden 响应以及以下响应体:

{"message":"The consumer_name is forbidden."}

应用消费者黑名单

consumer-restriction 插件在决定访问权限时,黑名单的优先级高于白名单。

  1. 从侧边导航栏选择你的网关组的 已发布服务(Published Services),然后选择你想要配置的服务,例如,版本为 1.0.0httpbin
  2. 从侧边导航栏选择 插件(Plugins),然后点击 添加插件(Add Plugin)
  3. 搜索 consumer-restriction 插件,然后点击 添加(Add)
  4. 在对话框中,执行以下操作:
  • 将以下配置添加到 JSON 编辑器(JSON Editor)

    {
    "blacklist": [
    "Lisa"
    ]
    }

    如果你遵循了前置条件的教程,你应该已经有了一个拥有密钥认证凭证的消费者 Alice

  • 点击 添加(Add)

  1. 创建一个拥有密钥认证凭证的新消费者 Lisa,其 Keylisa-key

验证

作为消费者 Alice 向服务发起请求:

curl -i "http://127.0.0.1:9080/ip" -H "apikey: alice-primary-key" 

你会看到请求成功并返回 200 OK 响应,因为消费者 Alice 不在黑名单中。

现在,作为新创建的消费者 Lisa 向服务发起请求:

curl -i "http://127.0.0.1:9080/ip" -H "apikey: lisa-key" 

因为消费者 Lisa 被添加到了黑名单中,你将收到一个 403 Forbidden 响应以及以下响应体:

{"message":"The consumer_name is forbidden."}

更多资源