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

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

卡卷网7个月前 (01-18)每日看点139

介绍

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

分享给朋友:

相关文章

为什么苹果贵没人喷,华为贵一群人喷?

苹果:6:¥5288,6s:¥5288,7:¥5288,8:¥5288,XR:¥6299,11:¥5499,12:¥5999,13:¥5999,14:¥5999,15:¥5999,16:¥5999华为:P8:¥2888,P9:¥2988,P...

想要在双 11 换一台全面无短板的新手机,有没有「闭眼买」的机型推荐?

想要在双 11 换一台全面无短板的新手机,有没有「闭眼买」的机型推荐?

最近一个月各大手机厂商的旗舰机扎堆发布,不知道大家看爽了没?这一代的性能续航大提升,最低 3599 元就能买到,同时老款也有不小的降幅,今年双 11 算是相当适合换手机的节点了!这次,小黑就给大家推荐双 11 期间值得购买的手机...150...

WordPress建站同时面向B端和C端,有什么好的解决方案?

这个很容易实现呀,只不过需要自己开发,整体用权限管理就可以实现了,B端和C端是不同用户权限,C端能看到的菜单入口和B端不一样就行了。技术层面实现没问题的,只不过就是看你们的技术能力和投入了 ,这样的需求应该没有现成的开源插件。只能找人定制开...

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

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

如何进行 Elasticsearch 调优实践?

如何进行 Elasticsearch 调优实践?

面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s ,坑爹了。第一次搜索的...

PHP承载百万/天 访问量需要用到什么技术?

当年做一个百万PV的商城,也不过是两台2c4g的阿里云虚机罢了(其实一台就够,另外一台主要的逼着大家一定开发的时候一定要有负载均衡和横向扩容的意识)。当时框架还是Thinkphp3.2,框架提高运行效率的开关全打开,标准的lnmp模式,单机...

发表评论

访客

看不清,换一张

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