У меня проблемы с поиском примера для подражания. Моя конкретная ситуация выглядит следующим образом:
У меня есть 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, не привезя свой личный ноутбук вработа.
Так что, если я пропустил какие-нибудь всеобъемлющие учебники, которые охватывают эту тему, я был бы чрезвычайно благодаренуказывать в этом направлении.