如何确保.Net Core上的web api控制器仅由本地计算机使用



请参阅此StackOverflow问题。

我正在将一个应用程序从.Net Framework移植到.Net Core 3.1。在.Net Framework解决方案中使用了上述SO问题中的解决方案,以确保控制器只能由同一服务器上的其他应用程序使用。

我找到了一个类似的AuthorizeAttribute,但它没有相同的方法来覆盖。

我还认为我知道如何添加过滤器:

services.AddControllers(options =>
{
options.Filters.Add(*some_filter_here*);
});

但我不知道如何创建过滤器。

如何在.Net Core 3.1中做到这一点?或者有没有一种不同的方式来做我想做的事?

您可以创建一个自定义授权过滤器:

public class LocalAuthorizationFilter : IAuthorizationFilter
{
public LocalAuthorizationFilter()
{
}
public void OnAuthorization(AuthorizationFilterContext context)
{
var isLocal = context.Request.IsLocal();
if (!isLocal)
{
context.Result = new ForbidResult();
}
}
public static bool IsLocal(this HttpRequest req)
{
var connection = req.HttpContext.Connection;
if (connection.RemoteIpAddress != null)
{
if (connection.LocalIpAddress != null)
{
return connection.RemoteIpAddress.Equals(connection.LocalIpAddress);
} 
else 
{
return IPAddress.IsLoopback(connection.RemoteIpAddress);
}
}

// for in memory TestServer or when dealing with default connection info
if (connection.RemoteIpAddress == null && connection.LocalIpAddress == null)
{
return true;
}

return false;
}
}

不再有IsLocal属性(HttpRequest文档(,所以我在您的类中添加了一个。您可以提取它并将其添加到扩展类中,以便在任何地方使用。为这个家伙喝彩

最新更新