我使用单独的 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 似乎在起作用。
我现在想知道的是:
_signInManager.PasswordSignInAsync(username, password)
请问有人对此有任何指导或最佳做法吗?
答案 0 :(得分:0)
由于 Blazor WASM 完全在客户端上执行,因此有两种不同的身份验证模型:Cookies 和 Token。 (还有更多)。但是,基本思想是相同的。 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