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

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

卡卷网11个月前 (01-18)每日看点184

介绍

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

分享给朋友:

相关文章

下班后可以做点什么副业赚钱呢?

下班后可以做点什么副业赚钱呢?

首先说明一下,我分享的任务不需要交钱,也不需要入群,只需要你去平台学习就可以。如果有任何让你交钱,进群的任务,请警惕被割韭菜。今天给大家分享7大赚钱副业,新手小白0粉丝0门槛0技术都可以去做,不说大富大贵,但是赚个零花钱还是可以。如果你已经...

最让你震惊的网站有哪些?

压箱底的震惊来了,来波大的,一百个网站!这些都是我平时辛辛苦苦收集的,是真的牛逼,居然还有这种网站。1、实时地球网址:https://zoom.earth/实时图像每 10 分钟更新一次,提供风暴、天气预报、降水、火警等数据2、陕西博物馆...

为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

我给你举个真实的例子。。有一个人叫高伟东,在哈尔滨工作。在2012年做了一个APP。使用词根词缀背单词。名字叫:词根词缀词典这个人编辑了2300余条词根,给10万多条单词建立了词根索引,整理了50多万条的单词记忆方法,包括新版本的诸多新功能...

为什么扫码支付在中国流行,在发达国家被排斥?

因为这是一种落后的技术。卖菜的大爷花5毛钱就可以打印出一张二维码来接受付款。你觉着这种先进么?跟先进完全不沾边的。正是因为不先进,所以才能流行。卖菜大爷用不起一台先进的、具有NFC感应功能的、还能刷各种银行卡的收款机。这就是现实。发达国家,...

我觉得华为Mate60Pro明明配置不高,为什么还是有那么多人买呢?

我也好奇啊,所以闲聊时,我问了我们公司的副总,我说Mate60pro配置这么拉胯你怎么还买啊?他一脸疑惑的看着我,配置?什么配置?我这手机信号挺好的啊?我们总经理用的是去年华为出的折叠手机,花了一万多,我也想问问他同样的问题,但奈何一直没有...

有没有能够兼顾便携并且流畅运行各种AI应用的笔记本?求推荐?

有没有能够兼顾便携并且流畅运行各种AI应用的笔记本?求推荐?

看了下题主的描述,可以考虑「联想YOGA Air 15 Aura AI元启版」,今年9月底出的一款轻薄本,也通过了英特尔Evo严苛认证。处理器用了英特尔最新的「酷睿 Ultra 7 258V」,主要亮点就是AI性能、图形处理能力和能效,很适...

发表评论

访客

看不清,换一张

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