И я хочу, чтобы пользователь аутентифицировался на нем в мультиарендной среде.Я создаю этот API для перехода от blazor к более качественному интерфейсному и серверному подходу, поэтому конфигурация была изменена с .UseMicrosoftIdentityWebApp на .AddMicrosoftIdentityWebApi
вся моя конфигурация:
Код: Выделить всё
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(bearer =>
{
bearer.Authority = $"{entraIdSettings.Instance}{entraIdSettings.TenantId}/v2.0";
bearer.Audience = entraIdSettings.ClientId;
bearer.TokenValidationParameters = new() { ValidIssuer = bearer.Authority, ValidAudience = bearer.Audience };
}, options =>
{
options.Instance = entraIdSettings.Instance;
options.Domain = entraIdSettings.Domain;
options.TenantId = entraIdSettings.TenantId;
options.ClientId = entraIdSettings.ClientId;
options.ClientSecret = entraIdSettings.ClientSecret;
}).EnableTokenAcquisitionToCallDownstreamApi(options =>
{
options.ClientId = entraIdSettings.ClientId;
options.TenantId = entraIdSettings.TenantId;
options.ClientSecret = entraIdSettings.ClientSecret;
});
services.AddAuthorization(options =>
{
options.AddPolicy("Default", x => x.RequireAuthenticatedUser());
options.DefaultPolicy = options.GetPolicy("Default")!;
});
services.AddDistributedTokenCaches();
services
.Configure(options =>
{
options.DisableL1Cache = false;
options.L1CacheOptions.SizeLimit = 1024 * 1024 * 1024;
options.Encrypt = true;
});
Итак... если я правильно понимаю, то, что я должен здесь сделать, это: если пользователь получает ошибку 401, перенаправить его на конечную точку авторизации login.microsoftonline.com.
Я так и делаю. URL-адрес перенаправления указывает на мой контроллер входа в систему, я получаю код авторизации и на этом застреваю.
Что делать с кодом авторизации? Я знаю, что после этого мне придется использовать
Код: Выделить всё
ITokenAcquisitionНо когда я хочу его использовать, он сообщает мне, что учетная запись не найдена, и выдает мне MsalUIRequiredException.
Он явно ожидает, что я предоставлю ему исходный токен. ему нужен токен обновления. И я знаю, что могу получить это с помощью кода авторизации.
Я пробовал сделать это с помощью ConfidentialClientApplication, это работает, но 1. оно даже не раскрывает токен обновления и 2. если он у меня был, что с ним делать? Сначала я думал, что ConfidentialClientApplication просто запишет токены в тот же кеш, который я настроил в приведенном выше коде. Чтобы, когда я впоследствии вызову ITokenAcquisition, на этот раз это сработало, но не сработало.
Я потратил целый день, чтобы найти ответ или образец , или что-нибудь, что подскажет мне, как будет работать этот первый первоначальный вход, но я не нашел ответа, поэтому, пожалуйста, помогите мне.
Подробнее здесь: https://stackoverflow.com/questions/791 ... otected-by
Мобильная версия