文章目录
- 登录
- 配置路由
- 配置消费者
- 创建后端服务项目
- 配置上游
- 再创建一个路由
- 测试
登录
http://192.168.10.101:9000
/user/login?redirect=%2Fdashboard
根据docker 容器里的指定端口:
配置路由
通过apisix 的API管理接口来创建(此路由,直接通过APISIX Dashboard可视化界面配置,据我所知是不行,包括key什么的都不知道在什么地方配置),所以直接通过API管理接口来创建。
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/r1' \
-H 'X-API-KEY: <api-key>' \
-H 'Content-Type: application/json' \
-d '{
"uri": "/apisix/plugin/jwt/sign",
"plugins": {
"public-api": {}
}
}'
其中的<api-key>
替换为:
最终为:
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/r1' \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-H 'Content-Type: application/json' \
-d '{
"uri": "/apisix/plugin/jwt/sign",
"plugins": {
"public-api": {}
}
}'
当出现以下红框里的内容时,表明执行成功:
注意以上内容,再往终端控制台粘贴执行时注意一下格式,有时候格式不对,可以使用AI工具给格式化一下,执行会报其他信息。
执行完毕后,通过APISIX Dashboard上的路由界面可以看到多了一条路由信息:
配置消费者
{
"username": "jack",
"plugins": {
"jwt-auth": {
"algorithm": "HS256",
"base64_secret": false,
"exp": 86400,
"key": "62ebfa59f112a56b0e691df72fbeeffc",
"secret": "my-secret-key"
}
}
}
在浏览器中输入:http://192.168.10.101:9080/apisix/plugin/jwt/sign?key=62ebfa59f112a56b0e691df72fbeeffc
如果没有问题的话,回复JWT Token的。请求参数中的key就是配置的消费者里的key。
创建后端服务项目
在另一台机器:192.168.10.106上,用JS写一个在Node.js运行,并可访问的后台服务项目。
Node.js的安装已省略,可参照网上的。
安装完毕后,看看 node -v 和 npm -v 是否都显示。
创建项目
cd /opt
mkdir my-node-app
npm init -y #会快速生成package.json
npm install express #web框架
vim app.js
将以下内容写入到app.js文件中
const express = require('express');
const app = express();
const port = 5001;
app.get('/protect/tom', (req, res) => {
res.send('Hello Tom! ');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}/`);
});
启动项目:node app.js
通过浏览器测试访问:
后续,我们对以上接口添加JWT验证,通过apisix进行访问。一般情况下后端服务的ip都是内网ip,外网是访问不到的。
关于在空项目目录下:执行 npm init 或npm init -y的区别?
配置上游
这里的上游,就是我们上面创建的后端服务项目
再创建一个路由
这个路由和之前创建的那个路由,不一样,这个路由要和我们的上游服务进行绑定,在apisix接收到此路由的url后,会根据此处的路由和上游的绑定关系,将请求转发到指定的上游。在此路由的设置上还可以绑定一些插件,如jwt-auth等,这样当apisix接收到匹配此路由的地址后,会先进行认证校验,校验成功后,才会将请求转发到指定的后端。
测试
流程是:客户端(浏览器)——>先请求apisix网关——>再转发给上游服务(后端服务)
由于在路由层面配置了JWT认证,所以这里会先进行JWT认证,认证成功后,才会转发到上游服务。
先获取JWT Token
为了方便测试:接下来使用APIPOST工具