Authing 结合 APISIX 实现统一可配置 API 权限网关(快速启动版) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Authing
V2EX    API

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

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

    当开发者在构建网站、移动设备或物联网应用程序时,可能需要使用 API 网关来处理接口流量。而在实际业务场景中,除去少部分允许匿名者访问的 API 外,API 提供者通常会对 API 使用者进行权限管控,只允许符合访问要求的使用者访问该 PI 。其次,权限管控涉及到权限策略,对于不同条件且均符合访问要求的使用者做权限区分。本文将带你快速创建使用 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     Solana     2489 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 02:36 PVG 10:36 LAX 18:36 JFK 21:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86