#azure #azure-active-directory #microsoft-identity-platform #microsoft-identity-web
#azure #azure-active-directory #microsoft-identity-platform #microsoft-identity-web
Вопрос:
Я внедряю Azure Active Directory в API .NET 5. В настоящее время этот API отлично работает на .NET Core 2.2.
Это старый рабочий код:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options =>
{
options.Instance = "https://login.microsoftonline.com/";
options.Domain = backOfficeADDomain;
options.TenantId = backOfficeADTenantId;
options.ClientId = $"api://{backOfficeADAPIClientId}";
options.ClientSecret = backOfficeADAPISecret;
});
Но с момента обновления до .NET 5 я получаю это предупреждение:
‘AzureADAuthenticationBuilderExtensions.AddAzureADBearer(AuthenticationBuilder, Action)’ устарел: ‘Это устарело и будет удалено в будущей версии. Используйте AddMicrosoftWebApiAuthentication от Microsoft.Идентификация.Вместо этого веб. См. https://aka.ms/ms-identity-web .’
Итак, я попытался обновить его до этого:
services.AddMicrosoftIdentityWebApiAuthentication(_configuration, "AzureAd");
Кажется, что раздел «AzureAD» в appsettings.json — единственный способ передать учетные данные. Как я могу вручную ввести экземпляр, домен, идентификатор клиента и т. Д.? Я не использую appsettings.json, все данные извлекаются вручную из AzureKeyVault.
Спасибо!
Ответ №1:
Предполагая, что у вас есть веская причина не использовать значение конфигурации из ваших настроек, вы можете добавить поставщика inmemory.
Вы также можете создать конфигурацию, которая используется только для этого метода расширения :
var azureAdConfig = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string>
{
{"AzureAd:Instance", "https://login.microsoftonline.com/"},
{"AzureAd:Domain", backOfficeADDomain}
//...
})
.Build();
services.AddMicrosoftIdentityWebApiAuthentication(azureAdConfig);
Ответ №2:
Хорошо, я нашел это!
На самом деле это очень просто:
IConfigurationSection azureAdSection = _configuration.GetSection("AzureAd");
azureAdSection.GetSection("Instance").Value = "https://login.microsoftonline.com/";
azureAdSection.GetSection("Domain").Value = backOfficeADDomain;
azureAdSection.GetSection("TenantId").Value = backOfficeADTenantId;
azureAdSection.GetSection("ClientId").Value = backOfficeADAPIClientId;
azureAdSection.GetSection("ClientSecret").Value = backOfficeADAPISecret;
services.AddMicrosoftIdentityWebApiAuthentication(_configuration, "AzureAd");
Кажется, что после целого дня сложного рефакторинга кода мой мозг не смог понять такое простое решение.
Обратите внимание, что мне также пришлось удалить «api://» из идентификатора клиента. Похоже, что новая версия добавляет его автоматически. Он попытался проверить «api: // api: //».