REST API 是否可以仅由前端应用程序的域调用?

问题描述 投票:0回答:1

我有一个具有 Angular 前端 (https://dev.myApp.com/) 和 .NET 8 REST API (https://dev.dataAPI.com/api/) 的网站, 这两个都托管在不同的本地服务器上。

如果我单击前端中的按钮,它会使用以下方法调用 REST API:

data(): Observable<Response> {
    const path = `${this._apiUrl}/Parameter/Data`;
    return this._http.get<Response>(path);
  }

这就是在浏览器控制台中记录调用的方式:https://dev.dataAPI.com/api/Parameter/Data

这是它返回到应用程序的内容:

{
    "success": 1,
    "message": "Ok",
    "data": [
        {
            "id": 27,
            "descri": "URUGUAY"
        }
    ]
}

问题是:如果我知道 get 请求的完整 url 并将其粘贴到浏览器上,它也可以工作:

restapi request in my browser

这对我来说感觉非常不安全。我们不会在响应中共享任何敏感数据,任何可能的数据都在 POST 请求中,因此任何想要像这样运行它们的人都必须知道响应正文的格式,但我仍然认为也许这不应该首先是可能的。

我们还没有使用令牌之类的东西来保护与 API 的通信,所以我现在必须考虑其他事情。

我读到我可以使用 CORS 做一些事情,但我也读到它很容易规避。这就是我的 API 中 CORS 的设置方式:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors(options =>
{
    options.AddPolicy("CorsApi",
        builder => builder.WithOrigins("*")
    .AllowAnyHeader()
    .AllowAnyMethod());
});

首先,这是正常行为还是我应该担心的事情?

我的 API 是否可以检查谁在调用它并使其执行,以便如果请求不是来自我的应用程序,则该请求不会执行?

.net angular rest asp.net-core-webapi
1个回答
0
投票

简短的回答是“很可能,不会”。 CORS 控制您是否可以从由不同 URL 提供服务的页面访问数据,在您的情况下为 https://dev.myApp.com,但 CORS 不会阻止任何人简单地输入 https://dev.dataAPI .com/api/ 在浏览器中。

如果您确实需要保护服务器上特定来源的数据,则应该通过网络工具来实现,例如将客户端的 IP 列入白名单 - 而不是通过应用程序代码。显然,如果您想保护应用程序中的数据,您应该使用身份验证,例如 OpenID Connect 和 JWT 令牌。

如果您的要求有保证,您可以使用两者防火墙和身份验证工具。

© www.soinside.com 2019 - 2024. All rights reserved.