Blazor Wasm .Net 5 — Реализует как отдельные учетные записи пользователей, так и проверку подлинности Azure AD

#c# #azure-active-directory #asp.net-identity #identityserver4 #blazor-webassembly

Вопрос:

Ниже в документации Microsoft объясняется, как защитить приложение, размещенное на Blazor WASM, с использованием двух разных подходов проверки подлинности.

1. Авторизация JWT Отдельного пользователя(сервер идентификации)

2. Проверка подлинности Azure AD

Существует необходимость предоставить конечному пользователю оба варианта, объединив оба механизма аутентификации в одном приложении. Пользователь должен иметь возможность выбрать один из вариантов на странице входа в систему.

Опция Azure AD предназначена только для того, чтобы предоставить конечным пользователям возможность единого входа, и, кроме того, вся логика авторизации будет обрабатываться локально с использованием отдельных учетных записей пользователей.

Как только пользователь пройдет проверку подлинности с помощью внедрения Azure, должен быть способ связать пользователя с локальным идентификатором для обработки логики авторизации и т. Д.

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

  1. Включение опции локального входа/входа в AzureAD на странице входа в клиент Blazor
  2. Связывание пользователя 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