Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Защита и доступ к службе .NET core WebApi с использованием OAuth2

Автор вопроса: MarkОтветов: 2

У меня есть работающая служба WebApi ядра Asp.NET, которую можно вызвать из основного приложения MVC ASP.NET. Служба вызывается с помощью созданной AutoRest оболочки. В настоящее время служба не имеет уровня безопасности, а веб-сайт защищен с помощью OAuth2.

Я добавил в сервис следующее:

public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddApplicationInsightsTelemetry(Configuration);

        services.AddMvc();

        // NEW Authorisation
        services.AddAuthorization(options =>
        {
            options.AddPolicy("ApiAccess", policy => policy.RequireClaim("email"));
        });

    }

Мой контроллер защищен так:

[Authorize(Policy = "ApiAccess")]
public class StatusController : Controller

Однако я получаю исключение "Неавторизованное", когда я вызываю оболочку AutoRest:

try
        {
            var service = new StatusAPI(new Uri("http://localhost:17237/"));
            ViewData["State"] = service.ApiStatusGet();
        }
        catch (Exception ex)
        {
            ViewData["State"] = new[] { new ServiceStatus { Name = "Health API", Message = "Is unreachable " + ex.Message } };
        }

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

  • Существует ли промежуточное программное обеспечение для проверки подлинности или какой-либо пользовательский код, который заполняет требование электронной почты в принципале? ycrumeyrolle 01.09.2016
  • В идеале я ищу пример, показывающий, как все должно быть настроено Mark 02.09.2016
  • Я не вижу, чтобы вы предоставляли какой-либо токен, который содержал бы утверждение электронной почты. Об этом позаботится StatusAPI? Cloud SME 02.09.2016

Ответы

Ответ 1 · lazy

Попробуйте указать значение претензии, например разрешенный адрес электронной почты. Как предложено здесь - https://docs.asp.net/en/latest/security/authorization/claims.html

Повторил код

options.AddPolicy("Founders", policy => policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));

Ответ 2 · ycrumeyrolle

Авторизация не может быть выполнена без аутентификации. Сначала вам нужно аутентифицировать пользователя, а затем смотреть на его личность для предоставления доступа.

Если у вас есть JWT, предоставленный вашей AS OAuth2, вы можете использовать промежуточное ПО аутентификации JWT.

public void ConfigureServices(IServiceCollection services)
{
  // add the authentication dependencies
  services.AddAuthentication();
}

public void Configure(IApplicationBuilder app)
{
  app.UseJwtBearerAuthentication(new JwtBearerOptions
  {
     // configure your JWT authentication here
  });
}

Конечно, JWT должен содержать утверждение "электронная почта".

Вы можете посмотреть пример ASPNET Core: https://github.com/aspnet/Security/blob/dev/samples/JwtBearerSample/Startup.cs#L67

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы