Blazor 服务器端 => 没有身份脚手架的身份验证可能吗?

时间:2021-03-24 22:03:39

标签: asp.net-core authentication jwt blazor blazor-server-side

我正在从事一个 blazor 服务器端项目(为了和学习未来的工作项目)。我正在尝试在应用程序中实现身份验证,例如在 asp.net 核心应用程序中 => 使用 httpcontext.SignInAsync(CookieDefaults.AuthenticationScheme,principal); 但我确实找不到任何相关信息 => Cookie 或 JWT 身份验证是否可能或更好地在 blazor 服务器端应用程序上说合乎逻辑?

我的项目结构:数据库/API <= Blazor 应用

我正在考虑使用我的 API 进行 Jwt 身份验证并使用 LocalStorageService => 存储 jwt 令牌,但是当我拥有有效的 jwt 令牌时,我如何告诉我的 blazor 应用我已获得授权?

我可以实现自定义授权过滤器吗?如果令牌仍然有效,过滤器是否应该检查 api?

现在有点困惑,blazor 真的很棒,我认为它是真正的未来框架,但身份验证对我来说有点难以理解

仅供参考:如果可能,我宁愿不使用 Identity 我没有 Code atm,因为我仍在研究 blazor 并尝试其他东西。

2 个答案:

答案 0 :(得分:0)

首先,是的,这是可能的,但是您为什么要重建那里的东西。如果操作不当,您可能只会将系统置于易受攻击的状态。

其次,问题需要更加清晰,才能得到正确回答。

第三,Jwt 令牌是可能的 我刚刚用 jwt 令牌构建了我的系统。

第四,Jwt token storage 更可以在其中存储信息。并且可以被API验证并被客户端读取

答案 1 :(得分:0)

Blazor 服务器应用程序中的身份验证可以通过注册 Cookie 或 JWT 身份验证处理程序来实现。因为 Blazor 服务器在 ASP.NET Core 应用程序中运行,所以 Cookie 身份验证更简单。您可以通过在 Startup.cs 中的 ConfigureServices 方法中添加 Cookie AuthenticationHandler 来实现这一点:

services.AddAuthentication()
     .AddCookies(); 

然后,您还需要指示中间件检查传入的请求是否具有有效的 Cookie,以便可以设置 HttpContext 上的 ClaimsPrincipal 属性:

app.UseAuthentication();

通过使用此配置,通过从控制器调用 SignInAsync 来请求您的应用程序的 Cookie 的每个用户都经过身份验证。您不能将 Cookie 附加到 Razor 组件内的 Http 响应,因为响应已经完成(所有更改都通过 WebSockets 连接发送)。然后,您可以使用内置的 AuthorizeView 组件仅向经过身份验证的用户呈现内容。无需进一步配置,您向其发出 cookie 的每个用户都经过身份验证。

您也可以使用 JWT 身份验证。与 Cookies 一样,ASP.NET Core 也内置了中间件来实现这一点。在这种情况下,我将构建一个实现抽象类 AuthenticationStateProvider 的自定义 AuthenticationProvider。在 GetAuthenticationStateAsync() 方法中,您从 LocalStorage 检索令牌。然后,您需要检查其有效性,以便可以返回相应的 AuthenticationState(其具有 ClaimsPrincipal 类型的属性)。

您可以构建自己的授权过滤器并检查令牌有效性。