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

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

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

介绍

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

分享给朋友:

相关文章

个人站长为什么越来越少了?个人网站还能做吗?

个人站长为什么越来越少了?个人网站还能做吗?

在互联网快速发展的浪潮中,个人站长曾经有过辉煌的时代,但如今却面临着诸多困境,甚至走向 “死亡”。一、竞争激烈,难以立足如今的互联网行业,巨头林立,各大平台凭借着雄厚的资金、技术和资源优势,占据了绝大部分市场份额。无论是搜索引擎、社交媒体还...

为什么大家都说手机性能永远超不过PC?

最新的天玑9400牛逼吧,堪称PC级CPU,测试成绩16W功耗能跑9500分,1.8W能跑3000分,GPU也差不多是这个情况。手机电池一般是4000-5000毫安时,电压3.7V。也就是说,手机正常满载5W功耗下,这个电池能支持运行4个小...

你为什么讨厌抖音?

我就被抖音毁了。现在被我媳妇从抖音里拯救出来了。我为什么会这样说?我媳妇硕士在读,我文化程度相对就比较低了。大多数人看抖音其实就是为了一图一乐呵刚开始我也是这样的,我是2017年在朋友的推荐下注册了抖音,刚开始那时候对抖音不太上瘾,一周也就...

你每天用来涨知识的手机应用程序有哪些?

你每天用来涨知识的手机应用程序有哪些?

经过深度使用和测评,从100个APP中选出的这35个超实用的app,每一个都是最硬核最有料的涨知识神器!每天打开看看,能让你提神醒脑,眼界大开,成为朋友聚会上的话题王者!双击屏幕取走哦~先放上全部APP目录,有新闻资讯类、英语学习类、读书类...

闲鱼上为什么会有人问都不问直接下单?

我去年卖一个荣耀90,挂的2200,最终成交2137.5元。对方是一个高高壮壮的西北口音,要求的自取。大概我吃过午饭,约了旁边的商场,那里有荣耀售后。见了面,先看了手机,试了好一会儿,各种测试,没问题。然后去了商场二楼的荣耀售后,让人家售后...

夸克浏览器受欢迎的原因是什么?

夸克浏览器受欢迎的原因是什么?

这是可以说的嘛~哈哈,它比较吸引我的几点是:安全无广、页面简洁、功能丰富、反应速度快......首页页面支持自定义,喜欢什么样子都可以自己调整,没有花里胡哨的各种资讯推送,热搜日报整理归纳好,想看再点开查看,看着舒适度直接拉满!实用日常工具...

发表评论

访客

看不清,换一张

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