Использование веб-API на стороне клиента Blazor с проверкой подлинности Windows

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

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

В angular я просто установил для параметра 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

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


person karl    schedule 11.06.2019    source источник
comment
Почему вы хотите заменить работающее клиентское решение, которое хорошо совместимо с WASM, который, по сути, все еще является экспериментальной технологией с меньшей поддержкой браузеров? Что именно вы надеетесь получить? P.s. в каком браузере (ах) вы видите указанную выше ошибку?   -  person ADyson    schedule 11.06.2019
comment
Что произойдет, если вы не воспользуетесь HttpClientHandler?   -  person mjwills    schedule 11.06.2019


Ответы (2)


Это (пока) невозможно. Клиентская часть Blazor работает в среде выполнения Mono инфраструктуры .NET, которая не поддерживает проверку подлинности Windows.

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

person Flores    schedule 11.06.2019

Я только что столкнулся с той же проблемой и не смог заставить ее работать с HttpClient, но я справился с ней с помощью HttpRequestMessage:

string APIURL = "https://localhost:44390/api/models";

// create request object and pass windows authentication credentials
var request = new HttpRequestMessage(HttpMethod.Get, APIURL);
request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);

// send the request and convert the results to a list
var httpResponse = await Http.SendAsync(request);
models = await httpResponse.Content.ReadFromJsonAsync<myModel[]>();
person ca8msm    schedule 01.12.2020