Использование клиентского веб-API Blazor с аутентификацией Windows - PullRequest
0 голосов
/ 11 июня 2019

В настоящее время у меня есть приложение, работающее с клиентом angular, использующее веб-API с аутентификацией Windows.

Теперь я собираюсь заменить этот интерфейс на Blazor (на стороне клиента), однако я сталкиваюсь с некоторыми проблемами, когда дело доходит до аутентификации.

В угловом режиме я просто установил withCredentials вtrue для того, чтобы предоставить необходимую информацию.

Приведенный ниже код работает должным образом с использованием серверной части Blazor, но, поскольку я хочу использовать клиентскую часть Blazor, это не вариант и мне мало чем помогает.


    IEnumerable<SearchView> searchResults;
    int NumberOfItems;

    protected override async Task OnInitAsync()
    {
        using (var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
        {
            var result = await client.GetJsonAsync<Response<SearchView>>("http://localhost:80/search");
            NumberOfItems = result.TotalItemCount;
            searchResults = result.Items;
        }
    }
}

Приведенный выше код вызывает исключение PlatformNotsupportedException.

WASM: System.PlatformNotSupportedException: System.Net.Http.HttpClientHandler не поддерживается на текущей платформе.WASM: в System.Net.Http.HttpClientHandler.set_UseDefaultCredentials (значение System.Boolean) <0x1d63160 + 0x0000c> в <4399d2484a2a46159ade8054ed94c78e>: 0

Очевидно, что поддерживается клиент, если не поддерживается код, если используется Blase, если не поддерживается код, если не поддерживается Blaz, если предоставлен код, если не поддерживаетсяЕсть любые альтернативные способы достижения того, чего я хочу, любые указания и помощь будут оценены.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Это невозможно (пока) невозможно. Blazor-клиент работает на Mono-среде .net, не поддерживающей аутентификацию Windows.

Лучший вариант - реализовать аутентификацию на основе токенов (например, JWT) и использовать ADFS.

0 голосов
/ 11 июня 2019

Попробуйте это:

Внедрить httpClient

Примечание: HttpClientHandler не поддерживается на клиентской стороне Blazor. Вместо этого используется WebAssemblyHttpMessageHandler, производное от HttpMessageHandler. Но вам не нужно использовать его напрямую, так как DefaultCredentials уже установлен. Но если вы хотите изменить его, вам нужно настроить WebAssemblyHttpMessageHandler в классе Startup. Спросите меня, хотите ли вы знать ...

@ inject HttpClient httpClient

    IEnumerable<SearchView> searchResults;
    int NumberOfItems;

    protected override async Task OnInitAsync()
    {
         var result = await httpClient.GetJsonAsync<Response<SearchView>>("http://localhost:80/search");
            NumberOfItems = result.TotalItemCount;
            searchResults = result.Items;

    }

Примечание. Приведенный выше код, хотя и базовый, может не работать, по крайней мере, не с первой попытки. Возможно, вам потребуется внести некоторые изменения.

  1. Не использовать с HttpClient
  2. HttpClient добавляется в контейнер (на стороне клиента Blazor) как Singleton
  3. Что такое Ответ ?

Конечно, в настоящее время вы не можете использовать аутентификацию Windows, но вы можете использовать аутентификацию куки-файлов с идентификацией или, что еще лучше, аутентификацию Jwt. И не забывайте, что у Blazor уже есть собственная система аутентификации ...

Надеюсь, это поможет ...

...