Как настроить сквозную проверку подлинности / авторизацию Azure AD в отключенном .net core API c # - PullRequest
0 голосов
/ 11 октября 2019

У меня проблемы с поиском примера для подражания. Моя конкретная ситуация выглядит следующим образом:

У меня есть Angular8 SPA, который получает токен-носитель из Azure AD через ADAL, и мне нужно использовать этот токен и получить группы из AzureAD после потребления, поскольку наш магазин этого не делает. В заявках Azure AD нет групп, поэтому мой API, который получает токен, имеет «специальное» разрешение на чтение этого из нашей Azure AD. В конце концов у нас будет другой интерфейсный вызов этого API с использованием того же метода.

Моя цель : у меня есть .Net Core C # API, которому будет передан токен Azure AD, и я хочупроверить правильность и получить группы, в которые входит пользователь. Оттуда мне нужно предоставить доступ к различным контроллерам в зависимости от того, к какой группе они принадлежат. (В вопросе только 3 группы: пользователь, администратор, суперпользователь). Мне не требуется никакого доступа или обработки имени пользователя или паролей или каких-либо страниц входа в систему.

Поэтому я прочитал документацию здесь и следовалинструкции по защите API, и я по-прежнему получаю сообщение об ошибке, так как кажется, что эти инструкции не достаточно далеко для меня, чтобы заставить это работать. В этой документации они утверждают, что используют:

services.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

Однако приведенный выше код не компилируется, пока я не сделаю следующее (если я не пропустил ссылку на библиотеку):

services.AddAuthentication("AzureAd").AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

Или

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

Итак, основываясь на многочисленных вещах, которые я прочитал, и парень из AD говорит, что я должен иметь возможность использовать Startup.cs использовать токен-носитель, чтобы разрешить вход, а затем отправить этот токен в конечную точку. на AzureAD, чтобы получить то, что мне нужно. Мне еще не удалось найти ни одного примера кода, который бы охватывал этот сценарий, и я не сомневаюсь, просто мое умение выполнять поиск не так уж велико, но, учитывая количество противоречивой и расплывчатой ​​информации, я обнаружил, что это также мое полетакже.

У меня есть

[Authorize]
    public class BaseController: ControllerBase

Затем в файле startup.cs у меня есть :

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors();

            services.AddAuthentication("AzureAd").AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
                .AddJsonOptions(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

            services.AddDbContext<InternalReportsContext>();
            services.AddAutoMapper(typeof(Startup));
        }

Моя последняя ошибка:

<div class="titleerror">InvalidOperationException: No authenticationScheme was specified, and there was no
        DefaultChallengeScheme found.</div>
    <p class="location">Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context,
        string scheme, AuthenticationProperties properties)</p>

И снова мне еще предстоит найти какой-либо экземпляр, который подробно объясняет, что мне нужно настроить, чтобы избавиться от этой ошибки. Иногда я получаю 401 ошибку, но в основном я сталкиваюсь с этой проблемой defaultScheme, даже если я устанавливаю значения по умолчанию для AzureAdBearer и, честно говоря, я не помню все конфигурации, которые я использовал.

Это мой первый набег вСоздание безопасности для приложения. Во всех других моих магазинах были стандартные решения, которые я мог бы просто использовать, и это место - ffa slogfest с политикой Orwellian InfoSec, поэтому я не могу получить доступ к 60% блогов разработчиков или GitHub, не привезя свой личный ноутбук вработа.

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

...