如何在.NET 6.0的AuthorizationFilter中检查HTTPS安全连接?
在.NET 6(ASP.NET Core)的AuthorizationFilterContext中,你可以通过HttpContext.Request.IsHttps属性检查请求是否使用HTTPS协议,这是.NET Framework中IsSecureConnection的替代方案。
示例代码
下面是一个自定义AuthorizationFilter的实现,用于验证请求是否为HTTPS:
public class RequireHttpsAuthorizationFilter : IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { // 检查当前请求是否使用HTTPS if (!context.HttpContext.Request.IsHttps) { // 若不是HTTPS,返回403禁止访问(也可根据需求重定向到HTTPS地址) context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden); } } }
反向代理场景下的补充配置
如果你的应用部署在反向代理(如Nginx、IIS)之后,代理会先接收HTTPS请求再转发给应用,此时需要配置ASP.NET Core识别代理传递的协议信息,确保IsHttps能正确反映实际请求的协议:
在Program.cs中添加转发头配置:
var builder = WebApplication.CreateBuilder(args); // 配置转发头,启用X-Forwarded-For和X-Forwarded-Proto builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 添加信任的代理IP地址(根据实际环境调整) options.KnownProxies.Add(IPAddress.Parse("你的代理IP")); }); var app = builder.Build(); // 必须在其他中间件之前启用转发头中间件 app.UseForwardedHeaders(); // 后续的中间件配置... app.Run();
内容的提问来源于stack exchange,提问作者Marcelo Myara
相关产品推荐
相关产品推荐

