当前位置:   article > 正文

开源网关Apache APISIX启用JWT身份验证

开源网关Apache APISIX启用JWT身份验证

在这里插入图片描述

说明:

创建最小API

首先,确保你已经安装了.NET 6 SDK。创建文件夹“MinimalApiDemo”,VS Code打开文件夹,打开终端

dotnet new web -o MinimalApiDemo
cd MinimalApiDemo
  • 1
  • 2

修改Program.cs

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

builder.WebHost.UseUrls("http://0.0.0.0:5001");

app.MapGet("/", () => "Hello, World!");

app.MapGet("/protect/{name}", (string name) => $"Hello, {name}!");

app.Run();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

启动项目

dotnet run
  • 1

浏览器打开“http://192.168.8.220:5001/protect/tom”,显示结果

Hello, tom!
  • 1

创建消费者

创建两个消费者,管理员admin和用户user

{
  "username": "admin_role",
  "plugins": {
    "jwt-auth": {
      "exp": 86400,
      "key": "admin",
      "secret": "admin1234567890"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
{
  "username": "user_role",
  "plugins": {
    "jwt-auth": {
      "exp": 86400,
      "key": "user",
      "secret": "user1234567890"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

在这里插入图片描述

创建上游

在这里插入图片描述

创建公共API端点

为JWT身份验证创建公共API端点/apisix/plugin/jwt/sign

在这里插入图片描述

{
  "uri": "/gen_token",
  "name": "jwttoken",
  "plugins": {
    "public-api": {
      "uri": "/apisix/plugin/jwt/sign"
    }
  },
  "status": 1
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

浏览器或者Postman等工具,请求如下链接,注意这里的key为admin

http://192.168.8.249:9080/gen_token?key=admin
  • 1

在这里插入图片描述

得到admin的token

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJhZG1pbiIsImV4cCI6MTcxNzc2ODcwNH0.YeuyvRJmRHwajqmFm6G8ffYtguIW4PFoZ7LY3iDO8Kg
  • 1

同理,接下来使用key为user

http://192.168.8.249:9080/gen_token?key=user
  • 1

得到user的token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyIiwiZXhwIjoxNzE3NzY4ODc0fQ.ZSpDGNmBHVjoKtLxxic6S5C4auNJx1FlAJThvJReq6k
  • 1

创建测试路由

测试之前的最小API接口

http://192.168.8.220:5001/protect/tom
  • 1

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

【更多】【查看】的内容如下

{
  "uri": "/protect/*",
  "name": "protect",
  "methods": [
    "GET"
  ],
  "plugins": {
    "consumer-restriction": {
      "whitelist": [
        "admin_role"
      ]
    },
    "jwt-auth": {}
  },
  "upstream_id": "516993931985027773",
  "status": 1
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

测试JWT认证

使用Postman工具,访问如下接口

http://192.168.8.249:9080/protect/tom
  • 1

在这里插入图片描述

Postman提示

{"message":"Missing JWT token in request"}
  • 1

Headers中Key填写“Authorization”,Value填写“Bearer [token]”(注意Bearer和[token]之间有一个空格)

使用user的token

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyIiwiZXhwIjoxNzE3NzY4ODc0fQ.ZSpDGNmBHVjoKtLxxic6S5C4auNJx1FlAJThvJReq6k
  • 1

Postman提示如下。网关阻止了user用户请求

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

在这里插入图片描述

接下来使用admin的token

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJhZG1pbiIsImV4cCI6MTcxNzc2ODcwNH0.YeuyvRJmRHwajqmFm6G8ffYtguIW4PFoZ7LY3iDO8Kg
  • 1

在这里插入图片描述

admin用户顺序访问受保护的接口

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/698287
推荐阅读
相关标签
  

闽ICP备14008679号