V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Authing
V2EX  ›  API

Authing 结合 APISIX 实现统一可配置 API 权限网关(快速启动版)

  •  
  •   Authing · 2023-03-24 15:22:38 +08:00 · 1236 次点击
    这是一个创建于 620 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当开发者在构建网站、移动设备或物联网应用程序时,可能需要使用 API 网关来处理接口流量。而在实际业务场景中,除去少部分允许匿名者访问的 API 外,API 提供者通常会对 API 使用者进行权限管控,只允许符合访问要求的使用者访问该 API 。其次,权限管控涉及到权限策略,对于不同条件且均符合访问要求的使用者做权限区分。本文将带你快速创建使用 Authing 结合 APISIX 实现统一可配置 API 权限网关

    01 关于 Authing

    Authing 是国内首款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务。以「 API First 」作为产品基石,把身份领域所有常用功能都进行了模块化的封装,通过全场景编程语言 SDK 将所有能力 API 化提供给开发者。同时,用户可以灵活的使用 Authing 开放的 RESTful APIs 进行功能拓展,满足不同企业不同业务场景下的身份和权限管理需求

    02 关于 APISIX

    Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 不仅支持插件动态变更和热插拔,而且拥有众多实用的插件。Apache APISIX 的 OpenID Connect 插件支持 OpenID Connect 协议,用户可以使用该插件让 Apache APISIX 对接 Authing 服务,作为集中式认证网关部署于企业中。

    03 业务目标

    通过 Authing 权限管理 + APISIX 实现 API 的访问控制。

    案例:我们希望用户在 Authing 进行认证后访问到被授权的 API 。 ( https://console.authing.cn/api/v2/get_console_context

    04 如何实现

    注意,本教程只用于与 APISIX 和 Authing 进行集成测试。后续我们将发布《 Authing 结合 APISIX 实现统一可配置 API 权限网关(插件开发版)》。

    4.1 业务架构

    4.2 先决条件

    需要自行提前安装,docker 和 docker-compose 。

    4.3 APISIX & Authing Plugin 基础环境搭建

    • 下载编排文件
    wget https://raw.githubusercontent.com/fehu-asia/authing-apisix-docker-compose/main/apisix-authing.tgz --no-check-certificate
    
    • cd 到压缩包所在目录执行如下命令
    tar -zxvf apisix-authing.tgz  -C /  && cd /apisix && docker-compose -p docker-apisix up -d
    

    到这里可以使用 docker ps 查看 apisix docker 进程启动状态, 随后访问 {your server IP}:9000 可以进入 dashboard 界面进行路由和插件的配置。

    4.4 在 Authing 对 API 进行管理

    Authing 官网:www.authing.com 。或点击文章底部阅读原文。

    • 创建应用

    配置 Token 签名算法为 RS256 及校验 AccessToken 的方式为 none 。

    • 创建用户

    进入 Authing 控制台-用户管理-用户列表-点击创建用户后,可以根据不同方式(用户名、手机号、邮箱)创建测试用户,如下图所示:

    • 创建 API

    进入 Authing 控制台-权限管理-创建资源,可以选择创建树数据类型的资源,如下图所示:

    添加相关操作,这里我们的操作对应 HTTP 的请求方法:

    • 创建策略

    进入权限管理-数据资源权限-数据策略标签,可以点击创建策略来新建数据访问策略,如下图所示。策略包含了对应的权限空间中定义的数据以及操作,创建后能够基于此策略对不同对象(用户、角色、用户组等)进行授权管理。

    • API 授权

    4.5 添加路由

    • 路由配置

    在 APISIX 宿主机上执行。

    注意,需要替换请求参数中的用户池 ID 以及密钥。

    curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    {
      "uri": "/*",
      "name": "authing_router",
      "plugins": {
        "ext-plugin-pre-req": {
          "allow_degradation": false,
          "conf": [
            {
              "name": "authing_agent",
              "value": "{\"url\": \"http://authing-adapter:18080/isAllow\",\"user_pool_id\": \"{用户池 ID}\",\"user_pool_secret\": \"{用户池密钥}\"}"
            }
          ],
          "disable": false
        }
      },
      "upstream": {
        "nodes": [
          {
            "host": "console.authing.cn",
            "port": 443,
            "weight": 1
          }
        ],
        "timeout": {
          "connect": 6,
          "send": 6,
          "read": 6
        },
        "type": "roundrobin",
        "scheme": "https",
        "pass_host": "node",
        "keepalive_pool": {
          "idle_timeout": 60,
          "requests": 1000,
          "size": 320
        }
      },
      "status": 1
    }'
    

    upstream 我们在这里使用的是 httpbin.orghttpbin.org 是一个简单的在线提供 HTTP 服务的网站,您可以将其用于测试,您也可以将其修改为自己的实际 API 服务地址。

    X-API-KEY 所在位置:/apisix/apisix_conf/config.yaml

    若您修改了此字段则需要在 curl 请求中进行修改:

    4.6 访问测试

    目标:当用户认证并携带有效的 AccessToken 且访问的 uri 是被授权的,方可正常调用 API 。

    • 获取 accessToken

    让我们先去 Authing 的应用进行认证,获取被授权用户的 accessToken 。

    复制这个 access_token 接下来测试会用到。

    • 未认证

    curl --location --request GET 'http://{服务器 IP}:9080/xxxx'
    
    • 无权限

    curl --location --request GET 'http://{服务器 IP}:9080/xxxx' \
    --header 'Authorization: Bearer {accessToken}'
    
    • 认证通过并成功访问

    curl --location --request GET 'http://{服务器 IP}:9080/api/v2/get_console_context' \
    --header 'Authorization: Bearer {accessToken}'
    

    05 未来可期

    在此方案基础上我们也可以实现统一的安全审计、用户行为轨迹分析、用户访问风险评估等,用以实现全链路 API 访问治理。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1125 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:56 · PVG 02:56 · LAX 10:56 · JFK 13:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.