Скрыть конечные точки API, определенные ABP - PullRequest
0 голосов
/ 29 октября 2019

При использовании Abp (www.abp.io) существует много предопределенных конечных точек API, таких как

  • /api/account/register
  • /api​/identity​/users

а также маршруты MVC, такие как

  • /Account/Register

Как отключить эти конечные точки или заменить их собственными версиями?

Фон илиcontext: Конечная точка регистра по умолчанию не должна предоставляться, потому что процесс регистрации включает специальный рабочий процесс, поэтому мы хотим отключить возможность создания случайных пользователей через API или маршрут MVC (/Account/Register).

Volo.Abp.Account.AccountController определяет конечную точку api/account/register и имеет атрибут RemoteServiceAttribute для предоставления его через автоматически сгенерированный API.

[RemoteService]
[Area("account")]
[Route("api/account")]
public class AccountController : AbpController, IAccountAppService
...

Попытка изменить свойства атрибута не сработала. До сих пор единственным решением было удаление маршрутов при настройке маршрутов MVC по умолчанию с обратной стороной, что конечные точки на самом деле недостижимы (404), но по-прежнему появляются в документах Swagger (/swagger/index.html).

// TODO: Find a better way to remove unused routes from api
app.UseMvcWithDefaultRouteAndArea(options =>
{
    var routesToRemove = new[]
    {
        "api/account/register",
        "account/register",
        "api/abp/multi-tenancy",
        "api/multi-tenancy",
        "api/abp/features",
        "api/identity/users",
    };

    foreach (var route in routesToRemove)
    {
        foreach (var dataSource in options.DataSources)
        {
            var endpoints = dataSource.Endpoints.Cast<RouteEndpoint>();
            var routeConfig = endpoints.FirstOrDefault(x =>
                x.RoutePattern.RawText.ToLowerInvariant().StartsWith(route));

            if (routeConfig != null)
            {
                ((List<Endpoint>) dataSource.Endpoints).Remove(routeConfig);
            }
        }
    }
});
...