Ограничьте доступ к конкретному Rest API, но разверните код

Я развернул свой основной код .net в IIS и NGINX. Есть ли способ запретить пользователю использовать конкретный API и не развертывать код повторно?

Или, если мне придется выполнить развертывание еще раз, могу ли я каким-либо образом ограничить пользователей, чтобы они не могли использовать этот API?

Если это в NGINX, вы можете настроить там конфигурацию, чтобы блокировать определенные пути.

DavidG 09.03.2024 16:11

Хакеры всегда могут перепроектировать код, чтобы получить исходный код, а затем изменить его для работы в любой системе.

jdweng 09.03.2024 16:11

Вы можете использовать правила брандмауэра.

Peppermintology 09.03.2024 16:14

Вам необходимо уточнить, что вы подразумеваете под словом «ограничить».

montonero 09.03.2024 17:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понимаю ваш вопрос, вы можете использовать флаг функции. .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

Другие вопросы по теме