3.7 JWT授权
...大约 1 分钟
简介
网关
支持JWT授权
是为了让系统功能权限控制放在网关统一处理,这样下游服务可以不用管权限认证和授权。
创建一个支持JWT授权的网关
提前准备:安装并启动Consul
打开 Visual Studio 2022 并创建Web Api项目(点击查看完整示例代码3.7)
安装依赖包
dotnet add package Wing.Consul
dotnet add package Wing.Gateway
Install-Package Wing.Consul
Install-Package Wing.Gateway
Program代码
using System.Security.Claims;
using Wing;
var builder = WebApplication.CreateBuilder(args);
builder.Host.AddWing(builder => builder.AddConsul());
builder.Services.AddAuthorization();
builder.Services.AddAuthentication("Bearer").AddJwtBearer();
builder.Services.AddWing()
.AddGateWay((downstreams, context) =>
{
//此处添加业务授权逻辑,也可以将payload解析的内容通过请求头转发到下游服务context.Request.Headers.Append()
var account = context.User.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier).FirstOrDefault().Value;
context.Request.Headers.Append("user-account", account);
return Task.FromResult(true);
});
var app = builder.Build();
app.Run();
配置示例
{
"Gateway": {
// 自定义路由
"Routes": [
{
// 上游配置
"Upstream": {
// 请求Url
"Url": "jwt",
// 请求方式
"Method": "get"
},
// 下游配置
"Downstreams": [
{
// 服务名称
"ServiceName": "Wing.Demo_3.2",
"Url": "WeatherForecast/JwtAuthPolicy",
// 请求方式
"Method": "get"
}
],
// 是否启用JWT认证
"UseJWTAuth": true,
// 固定Key认证
"AuthKey": ""
}
],
// 请求日志
"Log": {
"IsEnabled": false,
"UseEventBus": false
}
}
}
获取token
执行创建JWT token的dotnet命令,结果如下:
dotnet user-jwts create
查看运行结果
分别启动API服务示例3.2(点击查看完整示例代码3.2)、网关示例3.7(点击查看完整示例代码3.7),访问http://localhost:3710/jwt ,返回结果如下图: