#c# #azure-active-directory #asp.net-identity #identityserver4 #blazor-webassembly
Вопрос:
Ниже в документации Microsoft объясняется, как защитить приложение, размещенное на Blazor WASM, с использованием двух разных подходов проверки подлинности.
1. Авторизация JWT Отдельного пользователя(сервер идентификации)
2. Проверка подлинности Azure AD
Существует необходимость предоставить конечному пользователю оба варианта, объединив оба механизма аутентификации в одном приложении. Пользователь должен иметь возможность выбрать один из вариантов на странице входа в систему.
Опция Azure AD предназначена только для того, чтобы предоставить конечным пользователям возможность единого входа, и, кроме того, вся логика авторизации будет обрабатываться локально с использованием отдельных учетных записей пользователей.
Как только пользователь пройдет проверку подлинности с помощью внедрения Azure, должен быть способ связать пользователя с локальным идентификатором для обработки логики авторизации и т. Д.
Я провел много онлайн-исследований, но не смог найти руководство или учебник для реализации этого. Я пытался реализовать это, объединив код, но я застрял с:
- Включение опции локального входа/входа в AzureAD на странице входа в клиент Blazor
- Связывание пользователя Azure AD с локальным пользователем на сервере
Код клиента Blazor
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddHttpClient("BlazorWasmIndvAuth.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("BlazorWasmIndvAuth.ServerAPI"));
//OPTION 1
//Azure Ad Authentication
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("api://123456/Api.Access");
});
//OPTION 2
//Individual User JWT authentication
builder.Services.AddApiAuthorization();
await builder.Build().RunAsync();
}
}
Ответ №1:
Быстрый ответ заключается в том, что ваше клиентское приложение и API предпочитают иметь дело только с одним сервером авторизации. Поддержка нескольких будет довольно грязной.
Мое предложение состоит в том, чтобы ваши приложения работали только с сервером идентификации, но разрешали входить в Azure AD (Федеративная аутентификация) через сервер идентификации. Смотрите файл ExternalController.cs в QuickStartUI на сервере IdentityServer.
Смотрите эту страницу
Комментарии:
1. Мне нравится только подход «Сервер идентификации». К сожалению, я не могу найти пример того, как настроить клиентское приложение Blazor WASM для обеспечения как локальной, так и AzureAD аутентификации. Некоторые ссылки будут действительно полезны.
2. пробовать docs.duendesoftware.com/identityserver/v5/ui/login/external
3. Ваше приложение Blazor вы настраиваете так, чтобы оно принимало только логин сервера идентификации. Затем в IdentityServer вы добавляете поддержку внешней аутентификации AzureAD. Приложение Blazor не будет знать об Azure AD