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

时间:2020-12-28 22:12:28

标签: blazor-webassembly

我使用单独的 API 项目创建了一个新的 Blazor WebAssembly 项目。我的 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;
     }

所以 Identity 似乎在起作用。

我现在想知道的是:

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

请问有人对此有任何指导或最佳做法吗?

1 个答案:

答案 0 :(得分:0)

由于 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.html https://identityserver4.readthedocs.io/en/latest/topics/signin.html#login-workflow https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/standalone-with-authentication-library?view=aspnetcore-5.0