当前位置:首页 > 每日看点

大家是如何给Api接口加密限流的呢?

卡卷网1年前 (2025-01-18)每日看点269

介绍

CorsUrls、IPLimit、SafeIps、Jwt 配置类库

1、快速入门

通过Nuget安装组件

Install-Package RuoVea.ExWeb

2、CorsUrls

// 配置化的CorsUrls services.CorsUrls(); //UseCors,UseAuthenticationg两个位置的顺序很重要 app.UseCors();

相关配置文件

"Cors": { /* === 跨域请求 (CORS)配置,多个url用豆号隔开,url为vue站点的地址,可以将发布后的地址也同时配置上 === */ "CorsUrls": "http://localhost:8081,http://localhost:8080", /* 添加预检请求过期时间(秒) */ "PreflightMaxAge": 2520 }

3、IPLimit

// 配置化的IPLimit限流 启动服务 services.IpLimitSetup(); //启用限流,需在UseMvc前面 //app.UseIpRateLimiting(); app.UseMiddleware();

相关配置文件

/* IP限制 是用来单独定义白名单里面的 覆盖特定客户 */ "IpRateLimitPolicies": { "IpRules": [ { "Ip": "84.247.85.224", "Rules": [ { "Endpoint": "*", "Period": "1s", "Limit": 10 }, { "Endpoint": "*", "Period": "15m", "Limit": 200 } ] }, { "Ip": "192.168.3.22/25", "Rules": [ { "Endpoint": "*", "Period": "1s", "Limit": 5 }, { "Endpoint": "*", "Period": "15m", "Limit": 150 }, { "Endpoint": "*", "Period": "12h", "Limit": 500 } ] } ] }

4、SafeIps

// 配置Ip app.SafeIps(); /* 限制指定IP访问 */ "SafeIps": "127.0.0.1;192.168.0.0-192.168.0.255"

5、Jwt 配置(建议使用:RuoVea.ExJwtBearer 类库)

services.JwtOptiong(); /* Jwt配置 */ "JWTSettings": { "ValidateIssuerSigningKey": true, // 是否验证密钥,bool 类型,默认true "IssuerSigningKey": "3c1cbc3f546eda35168c3aa3cb91780fbe703f0996c6d123ea96dc85c70bbc0a", // 密钥,string 类型,必须是复杂密钥,长度大于16 "ValidateIssuer": true, // 是否验证签发方,bool 类型,默认true "ValidIssuer": "SecurityDemo.Authentication.JWT", // 签发方,string 类型 "ValidateAudience": true, // 是否验证签收方,bool 类型,默认true "ValidAudience": "jwtAudience", // 签收方,string 类型 "ValidateLifetime": true, // 是否验证过期时间,bool 类型,默认true,建议true "ExpiredTime": 1440, // 过期时间,long 类型,单位分钟,默认20分钟 "ClockSkew": 5 // 过期时间容错值,long 类型,单位秒,默认5秒 }

6、使用 Jwt 进行权限控制思路

1. 定义个中间类 public class PermissionRequirement : IAuthorizationRequirement { } 2. 定义拦截中间件 public class PermissionHandler : AuthorizationHandler<PermissionRequirement>{ private readonly IUserService _userService; public PermissionHandler(IUserService userService) { _userService = userService; } protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) { var httpContext = (context.Resource as Microsoft.AspNetCore.Http.DefaultHttpContext).HttpContext; var isAuthenticated = httpContext.User.Identity.IsAuthenticated; if (isAuthenticated) { long userId; if (!long.TryParse(httpContext.User.Identity.Name, out userId)) { return Task.CompletedTask; } var functions = _userService.GetFunctionsByUserId(userId); var requestUrl = httpContext.Request.Path.Value.ToLower(); if (functions != null && functions.Count > 0 && functions.Contains(requestUrl)) { context.Succeed(requirement); } } return Task.CompletedTask; } } 3. 导入Jwt 配置 services.AddAuthorization(options => { options.AddPolicy("Permission", policy => policy.Requirements.Add(new PermissionRequirement())); }); services.AddSingleton<IAuthorizationHandler, PermissionHandler>();

7、公共方法 可扩展(BaseController)

/// <summary> /// 返回成功消息 /// </summary> /// <param name="data">数据</param> /// <returns></returns> protected virtual IActionResult ToJsonResult(object data) /// <summary> /// 返回成功消息 /// </summary> /// <param name="info">消息</param> /// <returns></returns> protected virtual IActionResult Success(string info) /// <summary> /// 返回成功数据 /// </summary> /// <param name="data">数据</param> /// <returns></returns> protected virtual ActionResult Success(object data) /// <summary> /// 返回成功消息 /// </summary> /// <param name="info">消息</param> /// <param name="data">数据</param> /// <returns></returns> protected virtual ActionResult Success(string info, object data) /// <summary> /// 返回成功消息 /// </summary> /// <param name="data">数据</param> /// <param name="total">总行数</param> /// <returns></returns> protected virtual ActionResult PageDate(object data, int total) /// <summary> /// 返回失败消息 /// </summary> /// <param name="info">消息</param> /// <returns></returns> protected virtual ActionResult Fail(string info) /// <summary> /// 返回失败消息 /// </summary> /// <param name="info">消息</param> /// <param name="data">消息</param> /// <returns></returns> protected virtual ActionResult Fail(string info, object data)

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/9944.html

分享给朋友:

相关文章

Photoshop 有哪些使用技巧?

Photoshop 有哪些使用技巧?

不看后悔系列!本篇分享25个PS实用的技巧! 不能保证每个都能让你惊艳,但是却是我用心写出来的,希望对你有帮助。 另外我的知乎也写了接近200篇PS的技巧,超级合集分享! 分享25个关于PS的技巧 一、快速制作文字倒影1、新建文档,15…

是什么让你抛弃了 Windows 而转向 Mac?

是什么让你抛弃了 Windows 而转向 Mac?

别的不说,这玩意儿是真抗造啊,我这2012年买的MacBook Pro,依然在用…… 这台电脑我博士最后两年用来写代码(只写不运行,运行要上集群)和写论文,工作之后就变成生活和娱乐了,因为我一直用架子和外接键盘(颈椎不好)所以电脑看…

手机的运行内存真的有必要上16GB吗?

全是国产垃圾APP惯出来的。 那些对国产软件没意见的人,建议出国看看,花不了多少钱,出门开 Google Map,订宾馆用 Booking,翻译用 Google translate,聊天用 Telegram,社交活动用 Discord,你会…

抖音和快手最大的区别是什么?

1、目标人群定位不同抖音:一二线城市,占比52%,大专学历以上,女性偏多。抖音以年轻群体居多。 快手:三四线城市,占比64%,高中学历以下,男女更均衡。快手所覆盖的年龄段范围更广。 2、内容创作的形式和深度不同抖音:偏深层,内容的装饰及表达…

为什么雷军身上没有酒色财气?

武大建校130周年时,雷军向母校个人捐款13亿。 在2023年8月14日晚上七点,雷总在国家会议中心举行的进行第四次年度演讲「成长」: 全篇都在谈成长、梦想,这么多年了,始终做到了知行合一,我相信酒色财气可能真不是他所追求的,一直追求的就像…

为什么 lnx 求导是 1/x?

为什么 lnx 求导是 1/x?

其实,我想对题主说,你提的问题一点都不弱智。恰恰相反,这是个非常有意义的问题。我们学习一门知识,尤其是数学知识,要知其然,更要知其所以然。今天,我尝试从 “如何去定义“的角度出发来解释这个问题,不玩公式推导的符号游戏。希望能带来新的启发。为…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。