Как JWT аутентификации сервера Blazor без Microsoft идентичности? - PullRequest
0 голосов
/ 26 января 2020

Я использую Blazor Server (не использую webapi, httpclient и ...) и хочу использовать jwt для аутентификации

  1. Где хранить токен? localStorage или cook ie?
  2. как отправить jwt на сервер всех запросов?
  3. Мне пришлось использовать AuthenticationStateProvider?

    Я использовал httpContext, но я получил ошибку, если она не помещается в файл cshtml. Я также использовал localstorage внутри AuthenticationStateProvider, но только что получил ошибку

    , какая из них лучше? сервер Blazor (один проект) или сервер Blazor с WebAPI? (два проекта, сервер Blazor и API)

1 Ответ

2 голосов
/ 27 января 2020

какой из них лучше? сервер Blazor (один проект) или сервер Blazor с веб-интерфейсом? (два проекта, сервер Blazor и API)

Нет такой вещи лучше . Все зависит от ваших требований. Вам нужно или вы хотите использовать Wep Api sh? Если вы не собираетесь использовать Web Api, не используйте аутентификацию Jwt. Токен доступа Jwt используется, когда вы хотите получить доступ к конечным точкам Web Api. Вместо этого вы можете использовать систему Identity UI для аутентификации ваших пользователей. С чем вы, вероятно, знакомы, и можете настроить и запустить через некоторое время.

Где хранить токен? localStorage или cook ie?

You may use the JavaScript local storage to store and retrieve Jwt tokens.

как отправить jwt на сервер все запросы

Вы имеете в виду конечную точку сервера Wep Api, правильно ?

  1. Извлеките токен Jwt из локального хранилища (при условии, что ваше приложение уже аутентифицировало пользователя и сохранило токен в локальном хранилище), например:

    @code {
    
     List<Hotel> hotels;
    
     protected override async Task OnInitializedAsync()
     {
        // Read the token from the store
        var token = await TokenProvider.GetTokenAsync();
    
        var httpClient = clientFactory.CreateClient();
        httpClient.BaseAddress = new Uri("https://localhost:44381/");
    
        // Perform HTTP call to your Web Api end point Hotels
        // Deserialized the response into a list of hotel objects.
        hotels = await httpClient.GetJsonAsync<List<Hotel>>("api/hotels",
                        new AuthenticationHeaderValue("Bearer", token));
    
     }
    }
    

Обратите внимание, как я передаю токен Jwt конечной точке Wep Api.

Мне пришлось использовать AuthenticationStateProvider?

Вы спрашиваете, использовать AuthenticationStateProvider?

Обычно вы не используете AuthenticationStateProvider. Его подкласс, ServerAuthenticationStateProvider, автоматически добавляется в контейнер DI, поэтому вы можете внедрить его в свои компоненты и использовать его. В клиентской части Blazor вам нужно будет создать собственный AuthenticationStateProvider.

Однако вам придется использовать такие компоненты, как AuthorizeRouteView и AuthorizeView, для работы которых требуется объект AuthenticationState, и он предоставляется AuthenticationStateProvider.

Смотрите здесь, в моем ответе , как я их использую ...

Обновление:

I значит, что лучше? Blazor сервер с сигнализатором или Blazor с вебапи?

Blazor Server App - это SPA на основе SignalR, что означает, что связь между клиентской стороной приложения (браузером) и серверной стороной приложения (сервера) осуществляется с помощью SignalR. Вообще говоря, SignalR, в текущем контексте, является средством транспортировки и связи между двумя частями, которые составляют приложение сервера Blazor, упомянутое выше.

Веб-API, однако, в текущем контексте, является API через Интернет, доступ к которому можно получить с помощью HTTP-вызовов. В частности, это приложение, которое вы добавляете в свой проект с контроллерами, которые предоставляют конечные точки, которые можно вызывать с помощью службы HttpClient.

Как видите, это не SignalR против Web Api, так как эти термины относятся к двум полностью разные понятия. Вы можете спросить о разнице между протоколами SignalR и HTTP ...

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

Обратите внимание, что вы должны создать свой проект Web Api wi sh, чтобы использовать его из своего приложения Blazor Server.

и как авторизовать блазор с помощью signalr?

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

В заключение хочу отметить, что приложения Blazor на стороне клиента или Blazor WebAssembly не используют SignalR, а скорее WebAssembly, на случай, если ваша путаница возникнет отсюда.

...