如何在没有微软身份的情况下对 Blazor 服务器进行 jwt 身份验证?
how to jwt authentication blazor server without microsoft identity?
我正在使用 blazor 服务器(不使用 webapi、httpclient 和...)
我想使用 jwt 进行身份验证
- 我应该在哪里存储令牌? localStorage 还是 cookie?
- 如何将jwt发送到服务器所有的请求?
我必须使用 AuthenticationStateProvider?
我使用了 httpContext,但我得到了一个错误,除非它适合 cshtml
文件我还在 AuthenticationStateProvider 中使用了 localstorage 但是
刚刚遇到错误
还有,哪个比较好? Blazor 服务器(一个项目)或
带有 webapi 的 blazor 服务器?(两个项目,blazor 服务器和 api)
which one is better? blazor server (one project) or blazor server with webapi?(two project, blazor server and api)
没有更好的。这完全取决于您的要求。您需要或希望使用 Wep Api 吗?如果您不打算使用 Web Api,请不要使用 Jwt 身份验证。当您想要访问 Web Api 端点时,将使用 Jwt 访问令牌。您可以改用 Identity UI 系统来验证您的用户。您可能很熟悉,稍后可以设置并 运行。
Where should I store token? localStorage or cookie?
You may use the JavaScript local storage to store and retrieve Jwt tokens.
how to send jwt to server all of the request
您的意思是向服务器 Wep Api 端点,对吗?
从您的本地存储中检索 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 端点的。
I had to use AuthenticationStateProvider?
请问是否使用AuthenticationStateProvider?
通常,您不使用 AuthenticationStateProvider。它的子类 ServerAuthenticationStateProvider 会自动添加到 DI 容器中,因此您可以将它注入到您的组件中并使用它。在客户端 Blazor 中,您必须创建自定义 AuthenticationStateProvider。
但是,您必须使用AuthorizeRouteView 和AuthorizeView 等组件,这些组件需要AuthenticationState 对象才能发挥作用,它由AuthenticationStateProvider 提供。
我如何使用它们...
更新:
I mean, which is better? blazor server with signalr or blazor with webapi?
Blazor Server App是基于SignalR的SPA,也就是说应用程序的客户端(浏览器)和应用程序的服务器端(服务器)之间的通信是由SignalR实现的。一般而言,SignalR 在当前上下文中是构成上述 A Blazor Server App 的两个部分之间的传输和通信方式。
网络 Api,但是,在当前上下文中,是网络上的 API,可以使用 HTTP 调用访问。更具体地说,它是您添加到项目中的应用程序,带有控制器,这些控制器公开端点,您可以使用 HttpClient 服务调用它。
如您所见,这不是 SignalR 与 Web Api,因为这个术语指的是两个完全不同的概念。您可能会问 SignalR 与 HTTP 协议之间的区别...
我会问正确的问题而不是你的问题:我应该如何使用我的服务器端 Blazor 应用程序访问数据以及我应该使用什么服务或 Web Api?我已经在我的其他答案中详细回答了这个问题。您也可以查阅文档。
请注意,您应该创建一个 Web Api 项目并希望从 Blazor Server 应用程序中使用它。
and how authorize blazor with signalr?
我想你现在已经知道答案了。 Server Blazor App 基于 SignalR。你在这方面什么都不做。只需创建此类项目,然后开始编码,学习 Blazor 组件模型,这是 Blazor 的核心。
最后,我只想提一下 Blazor 客户端或 Blazor WebAssembly 应用程序,不要使用 SignalR,而是使用 WebAssembly,以防你的困惑来自这里。
我正在使用 blazor 服务器(不使用 webapi、httpclient 和...) 我想使用 jwt 进行身份验证
- 我应该在哪里存储令牌? localStorage 还是 cookie?
- 如何将jwt发送到服务器所有的请求?
我必须使用 AuthenticationStateProvider?
我使用了 httpContext,但我得到了一个错误,除非它适合 cshtml 文件我还在 AuthenticationStateProvider 中使用了 localstorage 但是 刚刚遇到错误
还有,哪个比较好? Blazor 服务器(一个项目)或 带有 webapi 的 blazor 服务器?(两个项目,blazor 服务器和 api)
which one is better? blazor server (one project) or blazor server with webapi?(two project, blazor server and api)
没有更好的。这完全取决于您的要求。您需要或希望使用 Wep Api 吗?如果您不打算使用 Web Api,请不要使用 Jwt 身份验证。当您想要访问 Web Api 端点时,将使用 Jwt 访问令牌。您可以改用 Identity UI 系统来验证您的用户。您可能很熟悉,稍后可以设置并 运行。
Where should I store token? localStorage or cookie?
You may use the JavaScript local storage to store and retrieve Jwt tokens.
how to send jwt to server all of the request
您的意思是向服务器 Wep Api 端点,对吗?
从您的本地存储中检索 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 端点的。
I had to use AuthenticationStateProvider?
请问是否使用AuthenticationStateProvider?
通常,您不使用 AuthenticationStateProvider。它的子类 ServerAuthenticationStateProvider 会自动添加到 DI 容器中,因此您可以将它注入到您的组件中并使用它。在客户端 Blazor 中,您必须创建自定义 AuthenticationStateProvider。
但是,您必须使用AuthorizeRouteView 和AuthorizeView 等组件,这些组件需要AuthenticationState 对象才能发挥作用,它由AuthenticationStateProvider 提供。
更新:
I mean, which is better? blazor server with signalr or blazor with webapi?
Blazor Server App是基于SignalR的SPA,也就是说应用程序的客户端(浏览器)和应用程序的服务器端(服务器)之间的通信是由SignalR实现的。一般而言,SignalR 在当前上下文中是构成上述 A Blazor Server App 的两个部分之间的传输和通信方式。
网络 Api,但是,在当前上下文中,是网络上的 API,可以使用 HTTP 调用访问。更具体地说,它是您添加到项目中的应用程序,带有控制器,这些控制器公开端点,您可以使用 HttpClient 服务调用它。
如您所见,这不是 SignalR 与 Web Api,因为这个术语指的是两个完全不同的概念。您可能会问 SignalR 与 HTTP 协议之间的区别...
我会问正确的问题而不是你的问题:我应该如何使用我的服务器端 Blazor 应用程序访问数据以及我应该使用什么服务或 Web Api?我已经在我的其他答案中详细回答了这个问题。您也可以查阅文档。
请注意,您应该创建一个 Web Api 项目并希望从 Blazor Server 应用程序中使用它。
and how authorize blazor with signalr?
我想你现在已经知道答案了。 Server Blazor App 基于 SignalR。你在这方面什么都不做。只需创建此类项目,然后开始编码,学习 Blazor 组件模型,这是 Blazor 的核心。
最后,我只想提一下 Blazor 客户端或 Blazor WebAssembly 应用程序,不要使用 SignalR,而是使用 WebAssembly,以防你的困惑来自这里。