在 .NET Core 8 中实现 CORS

目录

介绍

CORS

[在 .NET Core 8 中设置 CORS](#在 .NET Core 8 中设置 CORS)

[高级 CORS 配置](#高级 CORS 配置)

最佳实践

常见陷阱

例子

默认

允许特定来源

结论


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

介绍

跨域资源共享 (CORS) 是 Web 浏览器中实现的一项安全功能,它限制网页向与自身域不同的域发出请求。在现代 Web 开发中,尤其是在使用 Angular 作为前端框架和 .NET Core 8 作为后端时,正确实现 CORS 对于构建安全且功能完善的应用程序至关重要。本文概述了在 .NET Core 8 环境中设置 CORS 的最佳实践和常见陷阱。

CORS

想象一下,你家里有个玩具箱(你的网站),你有个朋友住在隔壁(另一个网站)。你的朋友想玩你玩具箱里的玩具(数据),但你的妈妈(浏览器)规定,你的朋友只能玩自己的玩具。这是为了确保一切安全。

假设你的网站是 mycooltoys.com,你朋友的网站是 funfriend.com,如果 funfriend.com 想从 mycooltoys.com 借一个玩具,CORS 就会进行检查。

funfriend.com 可以从 mycooltoys.com 借用玩具吗?

他们是否遵循了提问的规则?

如果一切顺利,那么你的朋友就可以借用这个玩具了!

在 .NET Core 8 中设置 CORS

安装必要的软件包:如果您尚未安装,请确保已安装所需的 .NET Core 软件包。大多数情况下,默认设置即可满足需求,但您也可以根据需要安装任何特定的 CORS 库。

在启动时配置 CORS:在 .NET Core 8 中,CORS 的配置通常在 Program.cs 文件中完成。以下是一个简单的配置示例。

var builder = WebApplication.CreateBuilder(args);

// Add CORS services

builder.Services.AddCors(options =>

{

options.AddPolicy("AllowAngularApp",

builder => builder.WithOrigins("https://your-angular-app.com")

.AllowAnyMethod()

.AllowAnyHeader()

.AllowCredentials());

});

var app = builder.Build();

// Use CORS policy

app.UseCors("AllowAngularApp");

app.MapControllers();

app.Run();

**允许特定来源:**对于生产环境,务必指定确切的来源,而不是使用 AllowAnyOrigin(),后者是一个常见的陷阱。限制允许的来源可以增强安全性。

options.AddPolicy("AllowAngularApp",

builder => builder.WithOrigins("https://your-angular-app.com")

.AllowAnyMethod()

.AllowAnyHeader());

**处理预检请求:**确保您的服务器能够处理预检请求。这些是浏览器发送的用于检查权限的 OPTIONS 请求。通过启用 CORS 并处理这些请求,您可以确保您的应用程序能够正确响应。

**允许凭据:**如果您的 Angular 应用需要发送 cookie 或 HTTP 身份验证信息,则需要在 CORS 策略中设置 `AllowCredentials()`。请谨慎使用此功能,因为它要求显式指定来源,而不能设置为 `AllowAnyOrigin()`。

高级 CORS 配置

**自定义允许的方法:**如果您的 API 使用特定的 HTTP 方法,您可以自定义允许的方法。

options.AddPolicy("AllowAngularApp",

builder => builder.WithOrigins("https://your-angular-app.com")

.WithMethods("GET", "POST", "PUT", "DELETE")

.AllowAnyHeader()

.AllowCredentials());

**设置公开标头:**如果您的 API 返回客户端需要访问的自定义标头,请使用 WithExposedHeaders 指定这些标头。

options.AddPolicy("AllowAngularApp",

builder => builder.WithOrigins("https://your-angular-app.com")

.AllowAnyMethod()

.AllowAnyHeader()

.WithExposedHeaders("X-Custom-Header")

.AllowCredentials());

**记录 CORS 请求:**为了便于调试,您可以记录 CORS 请求以跟踪出现的任何问题。以下是一个简单的日志记录中间件。

app.Use(async (context, next) =>

{

if (context.Request.Headers.ContainsKey("Origin"))

{

var origin = context.Request.Headers["Origin"];

Console.WriteLine($"CORS request from: {origin}");

}

await next();

});

最佳实践

**限制来源:**务必指定允许与您的 API 交互的确切来源。避免使用通配符 (*),因为它们会将您的 API 置于潜在的安全风险之中。

使用 HTTPS:确保您的 .NET Core 后端和 Angular 前端都通过 HTTPS 提供服务。这可以保护传输中的数据并增强可信度。

**定期审查 CORS 策略:**随着应用程序的增长和发展,请定期审查 CORS 配置,以确保其符合当前的安全要求。

**测试 CORS 配置:**使用 Postman 或浏览器开发者工具等工具测试您的 CORS 设置。检查错误并确保您的 API 返回预期的标头。

**API 文档:**在 API 文档中清晰地记录 CORS 策略和允许的来源。这有助于其他开发者了解如何正确地与您的 API 交互。

常见陷阱

**允许来源配置错误:**最常见的错误之一是允许来源配置错误。请仔细检查确切的 URL,包括协议(HTTP 或 HTTPS)以及任何可能的尾部斜杠。

**忘记应用 CORS 中间件:**请确保在映射任何端点之前应用 UseCors 中间件。将其放在端点映射之后可能会导致意外行为。

**AllowAnyOrigin 与 AllowCredentials 结合使用:**此组合不被允许,会导致 CORS 请求失败。如果需要凭据,请指定确切的来源。

**未处理 OPTIONS 请求:**忽略预检 OPTIONS 请求可能会导致 API 从不同来源访问时出现问题。请确保您的服务器能够正确处理这些请求。

例子

默认

允许特定来源

结论

在 .NET Core 8 中为 Angular 应用程序实现 CORS 对于创建安全且功能完善的 Web 应用程序至关重要。遵循最佳实践并注意常见陷阱,可以确保 CORS 配置既有效又安全。随着应用程序的演进,定期检查 CORS 配置有助于长期维护其安全性和功能性。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
csdn_aspnet1 天前
在 ASP.NET Core (WebAPI) 中启用 CORS
后端·asp.net·.netcore
观无2 天前
Windows 本地电脑搭建一个私有的、类似 Gitee 的 Git 服务
gitee·jenkins·.netcore
╰つ栺尖篴夢ゞ3 天前
Web之深入解析Cookie的安全防御与跨域实践
前端·安全·存储·cookie·跨域
武藤一雄4 天前
C# 异常(Exception)处理避坑指南
windows·microsoft·c#·.net·.netcore·鲁棒性
csdn_aspnet5 天前
在 ASP.NET Core 中使用自定义属性实现 HTTP 请求和响应加密
http·asp.net·.netcore
观无5 天前
.NET Core + Ocelot 网关 跨域 (CORS) 配置
状态模式·.netcore
csdn_aspnet5 天前
如何在 .NET Core WebAPI 和 Javascript 应用程序中安全地发送/接收密钥参数
javascript·.netcore·cryptojs
曲幽5 天前
FastAPI + Vue 前后端分离实战:我的项目结构“避坑指南”
python·vue·fastapi·web·vite·proxy·cors·env
武藤一雄8 天前
C# 异步回调与等待机制
前端·microsoft·设计模式·微软·c#·.netcore