【网关层】测试APISIX的JWT-AUTH扩展

本文详细介绍了如何在APISIX中使用JWT-AUTH插件进行消费者认证,通过创建consumer并配置插件,以及在route中启用JWT验证,实现针对不同消费方的定制化处理。步骤包括创建consumer、设置JWT插件、配置Route并获取token进行验证。

测试APISIX的JWT-AUTH扩展

一、前言

1、要入门并使用该扩展插件,需要首先去了解JSON WEB TOKEN(JTW),其一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息。

2、除了JWT之外,需要了解APISIX的Consumer模块的使用:
对于API网关通常可以用请求域名、客户端IP地址等字段识别到某类请求方,然后进行插件过滤并转发请求到指定上游,但以上描述在实际应用中可能深度不够。
在这里插入图片描述

如上图,APISIX,可以配置并知道API Consumer(消费方)具体是谁,这样就可以对不同API Consumer配置不同规则。

字段必选说明
upstream消费方名称
plugins该消费方对应的插件配置,它的优先级是最高的:Consumer > Route > Service

在APISIX中,识别Consumer的过程如下图
在这里插入图片描述

①、授权认证:比如key-auth、JWT等。
②、获取consumer_id:通过授权认证后,即可自然获取到对应的 consumer_id,它是消费方的唯一识别标识。
③、获取consumer上绑定的plugins或者upstream信息:完成对不同配置进行不同的效果。

我的简单理解:访问同一个API的不同消费方,在APISIX里可以通过consumer模块给他进行消费方个人订制的插件或者个人订制的upstream配置。

二、JWT-AUTH插件测试步骤

1、创建一个consumer对象,并设置插件jwt-auth的值,可用以下命令:
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "testjwt", "plugins": { "jwt-auth": { "key": "user-key", "secret": "my-secret-key" } } }'
或者在可视化控制台中新增:在这里插入图片描述
在这里插入图片描述

2、创建一个Route对象,并开启jwt-auth插件。可用以下命令:
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "methods": ["GET"], "uri": "/wrrBlog/*", "plugins": { "jwt-auth": {} }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:8088": 1 } } }'
也可使用可视化控制台创建:
在这里插入图片描述

其中,127.0.0.1:8088是自定义的微服务或一个API接口的IP+端口,/wrrBlog/* 代表API接口为/wrrBlog为前缀的API接口

3、使用如下命令获取token

curl http://127.0.0.1:9080/apisix/plugin/jwt/sign?key=user-key -i
或直接用浏览器访问
在这里插入图片描述

4、尝试不带token访问界面,发现提示缺乏jwt。

在这里插入图片描述

5、分别尝试各种方式将token携带入请求体,传入后台尝试通过验证
如 直接携带于参数中:
在这里插入图片描述

如 置于cookie中:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-khaTnaV1-1610676851726)(en-resource://database/555:1)]

### 获取和管理 Docker-Apache APISIX 的 Token 认证信息 Apache APISIX 是一个高性能、可扩展的微服务 API 网关,支持通过 Token 进行身份验证和访问控制。在 Docker 环境中部署 Apache APISIX 后,管理 Token 认证信息通常涉及以下几个方面: #### 1. **配置 Token 认证插件** Apache APISIX 提供了多种认证插件,例如 `key-auth`、`jwt-auth` 和 `basic-auth`。要启用 Token 认证,首先需要在 APISIX 的配置文件中启用相关插件,并将其绑定到具体的路由或服务上。 ```yaml # 示例:在路由配置中启用 key-auth 插件 plugins: key-auth: true ``` 启用插件后,APISIX 会要求客户端在请求头中提供有效的 Token(例如 `apikey`)[^3]。 #### 2. **创建和管理 Token** Token 通常与用户或客户端账户绑定。可以通过 APISIX 的 Admin API 来创建和管理 Token。以下是一个使用 Admin API 创建 Key 的示例: ```bash curl -X PUT "http://apisix-admin:9080/apisix/admin/consumers" \ -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" \ -d ' { "username": "test-consumer", "plugins": { "key-auth": { "key": "my-secret-key" } } }' ``` 上述命令创建了一个名为 `test-consumer` 的消费者,并为其分配了一个 `key-auth` 插件,其中 `key` 字段表示 Token 值。 #### 3. **通过环境变量或配置文件注入 Token** 在 Docker 环境中,可以通过环境变量或配置文件将 Token 注入到容器中。例如,在 `docker-compose.yml` 文件中,可以使用 `environment` 字段设置环境变量: ```yaml services: apisix: image: apache/apisix:3.0.0 environment: - APISIX_ADMIN_KEY=edd1c9f034335f136f87ad84b625c8f1 ``` 这样,APISIX 容器启动时会自动读取这些环境变量,并用于认证管理操作[^2]。 #### 4. **使用 Secret 管理 Token** 为了增强安全性,建议将 Token 存储在 Kubernetes 的 Secret 或 Docker 的 Secret 管理系统中。例如,在 Kubernetes 中,可以创建一个 Secret 并将其挂载到 APISIX 容器中: ```bash kubectl create secret generic apisix-token --from-literal=admin-key=edd1c9f034335f136f87ad84b625c8f1 ``` 然后在 Deployment 配置中引用该 Secret: ```yaml env: - name: APISIX_ADMIN_KEY valueFrom: secretKeyRef: name: apisix-token key: admin-key ``` 这种方式可以避免 Token 明文暴露在配置文件或日志中[^3]。 #### 5. **定期更新和轮换 Token** 为了防止 Token 被滥用或泄露,应定期更新 Token。可以通过 APISIX 的 Admin API 修改现有消费者的 Token: ```bash curl -X PATCH "http://apisix-admin:9080/apisix/admin/consumers/test-consumer" \ -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" \ -d ' { "plugins": { "key-auth": { "key": "new-secret-key" } } }' ``` 此外,可以结合自动化工具(如 Vault 或 Kubernetes Operator)实现 Token 的自动轮换[^3]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值