Blazor Webassembly应用程序如何知道哪个用户已登录服务器端



我创建了一个新的Blazor WebAssembly项目,其中包含一个单独的API项目。我的WebAssembly项目将查询此WebAPI以获取数据。

我已经在我的应用程序中包含了Identity,这似乎很有效。我可以注册一个新用户,并使用下面的代码在我的Web API上登录一个用户。

用于登录某人的代码:

var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, false, lockoutOnFailure: false);
if (result.Succeeded)
{
//I arrive here, so login was succesful
return true;
}

因此,"身份"似乎正在发挥作用。

我现在想知道的是:

  1. 我的用户登录到web组装应用程序
  2. 该应用程序使用HttpClient向我的服务器发送请求,使用用户名和密码对用户进行身份验证
  3. 服务器检查用户名和密码,并使用有效的_signInManager.PasswordSignInAsync(username, password)
  4. 我的客户端如何知道哪个用户已通过身份验证?如何显示有关此用户的更多信息,检查他的角色

有人对此有任何指导或最佳实践吗?

由于Blazor WASM完全在客户端上执行,因此有两种不同的身份验证模型:CookiesToken。(还有更多(。不过,基本的想法是一样的。对于HttpClient发送的每个HTTP请求,都会向服务器发送一个额外的头。

就我个人而言,我认为令牌身份验证是一种在不同库中支持的更智能的方式,并且可以很快实现。

简而言之:使用基于令牌的方法(更准确地说,使用OpenId Connect(,您可以提供身份服务,您的Blazor应用程序将成为客户端。与cookie不同,令牌可以由客户端轻松读取。如果配置正确,它会包含诸如用户名或电子邮件地址之类的信息(声明(。身份服务是一个MVC/Razor页面应用程序,具有处理身份验证流的特殊库。

身份验证流程(非常、非常简短(:用户想要登录到您的Blazor应用程序。如果没有可用的令牌,则身份验证过程开始。Blazor应用程序将用户重定向到";认证流";身份服务的一部分。它是一个没有任何";视觉";后果结果是再次重定向到MVC/Razor页面登录视图。您可以在这里实现任何身份验证逻辑。如果用户已成功通过身份验证(基于您的逻辑(,则用户将重定向回您的Blazor应用程序,并在URL中使用有效令牌。该令牌被提取,并且可以用于访问API。

这听起来有点复杂,需要学习和理解。但是,您将获得一种可靠、广泛使用且安全的方式来进行身份验证和授权。

作为读取的起点

https://identityserver4.readthedocs.io/en/latest/quickstarts/0_overview.htmlhttps://identityserver4.readthedocs.io/en/latest/topics/signin.html#login-工作流https://learn.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/standalone-with-authentication-library?view=aspnetcore-5.0

最新更新