当前位置:首页 > 每日看点 > 正文内容

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

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

介绍

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

分享给朋友:

相关文章

一条音频千万播放!喜马拉雅如何成为亿万女性用户的情感树洞?

一条音频千万播放!喜马拉雅如何成为亿万女性用户的情感树洞?

哪个时刻你觉得自己很孤独,是母胎单身20余年渴望被陪伴,是因为身材焦虑渴望被接受,是走在创业独木桥上渴望被支持,还是困在产后抑郁中渴望被理解? 女性的情感倾诉需求越来越被...

电脑c盘哪些文件可以删除?

电脑c盘哪些文件可以删除?

电脑上的文件夹都是英文,很多朋友都不敢乱删,下面这几个文件夹里的文件,你可以放心删除。一、可删除的文件1、Backup这是一个备份文件夹,很多装机软件经常会把需要备份的东西,放在这个文件夹中。而当我们需要的软件正常保存之后,这些东西也就没有...

普通人一部手机用多久?

普通人一部手机用多久?

各位知友,你们的现在的手机用了多久了呢?回看国外分析机构TechInsights的报告,目前大家的用机周期是越来越长了,在国内,也达到了「40个月」,就是很多人至少三年半才会换一次手机。仔细想想,不对呀,现在新机不是一直出吗?为什么大家都不...

需要做一个微信小程序项目,大公司价格太高怎么办?

需要做一个微信小程序项目,大公司价格太高怎么办?

一个小程序制作开发多少钱构建一个微信小程序大概需要花费多少资金? 一、自主开发如果选择自主开发,这里面门道可不少。微信小程序认证费用: 300 /年域名费用: 30 - 80 /年服务器费用: 600 - 3000 /年这么一算,扣除人力成...

PS有哪些实用小技巧,小白也能一学就会?

PS有哪些实用小技巧,小白也能一学就会?

不看后悔系列!本篇分享25个PS实用的技巧!不能保证每个都能让你惊艳,但是却是我用心写出来的,希望对你有帮助。另外我的知乎也写了接近200篇PS的技巧,超级合集分享!我目前正在带一个PS/Ai的软件训练营,两个多月搞定两大软件的学习详细的内...

大量刷短视频,会让大脑变笨拙吗?

会。我曾经是一名高三学生,亲身实践过。当时集中突破语文,每天都在刷语文卷。然后有一天想躺一下刷手机,结果短视频刷完了,我再去看哪些文章,只觉头晕眼花,难以理解文字。不过好在这种情况是短时间的,过了一天我的能力又恢复了。在我看来,长期刷短视频...

发表评论

访客

看不清,换一张

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