Я развернул свой основной код .net в IIS и NGINX. Есть ли способ запретить пользователю использовать конкретный API и не развертывать код повторно?
Или, если мне придется выполнить развертывание еще раз, могу ли я каким-либо образом ограничить пользователей, чтобы они не могли использовать этот API?
Хакеры всегда могут перепроектировать код, чтобы получить исходный код, а затем изменить его для работы в любой системе.
Вы можете использовать правила брандмауэра.
Вам необходимо уточнить, что вы подразумеваете под словом «ограничить».





Если я правильно понимаю ваш вопрос, вы можете использовать флаг функции. .net имеет встроенные инструменты, которые позволяют вам активировать или деактивировать данный контроллер или действие контроллера, и делать это через настройки вашего приложения без необходимости изменять и развертывать какой-либо код.
Вы можете сделать это следующим образом:
Добавьте службу в свое приложение в автозагрузке, программе или везде, где вы настраиваете свои службы:
using Microsoft.FeatureManagement;
builder.Services.AddFeatureManagement();
Вы можете добавить флаги своих функций в файл appsettings.json, чтобы можно было легко изменять их, не касаясь кода. Вы должны подключить свое приложение к конфигурации флага функции appsettings:
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddAzureAppConfiguration(options =>
options.Connect(
builder.Configuration["ConnectionStrings:AppConfig"])
.UseFeatureFlags());
Я считаю, что описанный выше способ проще, используя встроенное свойство json для управления функциями, но вы также можете определить свое собственное и получить к нему доступ с помощью GetSection, который я не буду здесь подробно описывать.
Затем вам следует добавить его в приложение в своем промежуточном программном обеспечении:
builder.Services.AddAzureAppConfiguration();
app.UseAzureAppConfiguration();
И в appsettings.json:
{"FeatureManagement": {
"FeatureA": true, // Feature flag set to on
"FeatureB": false, // Feature flag set to off
}
}
}
Вы также можете объявить некоторый статический класс, чтобы добавить имя своих настроек для удобства использования во всем приложении:
public static class MyFeatureFlags
{
public const string FeatureA = "FeatureA";
public const string FeatureB = "FeatureB";
}
Вы можете использовать это внутри действия/метода, чтобы «скрыть» данный поток, или использовать его для отключения контроллера или одного действия, которое, я считаю, является вашим вариантом использования:
using Microsoft.FeatureManagement.Mvc;
[FeatureGate(MyFeatureFlags.FeatureB)]
[HttpGet]
public ActionResult<Something> MyApi()
{
...
}
Как вы можете видеть, FeatureB имеет значение false, поэтому действие будет отключено. Если вы хотите его включить, просто измените его значение на true в своих настройках, и API станет доступен для использования.
Вы можете кэшировать эти значения, чтобы они обновлялись через определенный промежуток времени, когда вы решите их изменить:
config.AddAzureAppConfiguration(options =>
options.Connect(
builder.Configuration["ConnectionStrings:AppConfig"])
.UseFeatureFlags(featureFlagOptions => {
featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
}));
Посетите эту страницу для получения справочной и более подробной информации, чтобы при необходимости вы могли адаптировать этот ответ к вашей конкретной реализации:
https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core
Если это в NGINX, вы можете настроить там конфигурацию, чтобы блокировать определенные пути.