我正在使用blazor服务器(不使用webapi,httpclient和...) 我想使用jwt进行身份验证
我必须使用AuthenticationStateProvider吗?
我使用了httpContext,但除非将其放入cshtml中,否则我得到一个错误 我也在AuthenticationStateProvider内部使用了localstorage文件,但是 只是有一个错误
还,哪个更好? blazor服务器(一个项目)或 带有webapi的blazor服务器?(两个项目,blazor服务器和api)
答案 0 :(得分:3)
哪个更好? blazor服务器(一个项目)或带有webapi的blazor服务器?(两个项目,blazor服务器和api)
没有这样的东西更好。这完全取决于您的要求。您是否需要或希望使用Wep Api?如果您不打算使用Web Api,请不要使用Jwt身份验证。要访问A Web Api端点时,将使用Jwt访问令牌。您可以改用Identity UI系统来验证用户。您可能很熟悉,并且可以在一段时间内完成设置和运行。
我应该在哪里存储令牌? localStorage还是cookie?
You may use the JavaScript local storage to store and retrieve Jwt tokens.
如何将jwt发送到服务器的所有请求
您的意思是服务器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端点。
我必须使用AuthenticationStateProvider吗?
您问是否使用AuthenticationStateProvider吗?
通常,您不使用AuthenticationStateProvider。它的子类ServerAuthenticationStateProvider被自动添加到DI容器中,因此您可以将其注入到组件中并使用它。在客户端Blazor中,您必须创建一个自定义AuthenticationStateProvider。
但是,您必须使用诸如AuthorizeRouteView和AuthorizeView之类的组件,它们需要AuthenticationState对象才能起作用,并且由AuthenticationStateProvider提供。
See here, in my answer, 我如何使用它们...
更新:
我的意思是,哪个更好?带有signal的blazor服务器或带有webapi的blazor服务器?
Blazor Server App是基于SignalR的SPA,这意味着应用程序(浏览器)的客户端与应用程序(服务器)的服务器端之间的通信是由SignalR实现的。一般来说,SignalR在当前上下文中是构成上述Blazor Server App的两个部分之间的传输和通信方式。
但是,在当前上下文中,Web Api是可以通过HTTP调用访问的Web API。更具体地说,这是一个使用控制器添加到项目中的应用程序,该控制器公开了可以使用HttpClient服务调用的端点。
正如您所看到的,它不是SignalR与Web Api的关系,因为该术语指的是两个完全不同的概念。您可能会问到SignalR与HTTP协议之间的区别...
我会问一个正确的问题,而不是您的问题:我应该如何使用服务器端Blazor应用程序访问数据,我应该使用服务或Web Api?我在其他答案中已经详细回答了这个问题。您也可以查阅文档。
请注意,您应该从Blazor Server应用程序中创建要使用的Web Api项目。
以及如何使用Signalr授权blazor?
我想现在您已经知道答案了。 Server Blazor应用程序基于SignalR。在这方面,您什么也没做。只需创建此类项目,然后开始编码,学习Blazor的核心Blazor组件模型。
最后,我只想提到Blazor客户端或Blazor WebAssembly Apps,不要使用SignalR,而要使用WebAssembly,以防万一。