【问题标题】:Blazor Serverside => Authentication without Identity Scaffolding POSSIBLE?Blazor 服务器端 => 没有身份脚手架的身份验证可能吗?
【发布时间】:2021-06-21 16:43:21
【问题描述】:

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

我的项目结构:数据库/API

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

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

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

fyi:如果可能,我宁愿不使用 Identity 我没有 Code atm,因为我仍在努力学习 blazor 并尝试其他东西等。

【问题讨论】:

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


    【解决方案1】:

    首先,是的,这是可能的,但你为什么要重建那里的东西。如果您没有正确执行,您可能会将您的系统置于易受攻击的状态。

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

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

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

    【讨论】:

      【解决方案2】:

      Blazor 服务器应用程序中的身份验证可以通过注册 Cookie 或 JWT 身份验证处理程序来进行。因为 Blazor Server 在 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 类型的属性)。

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

      【讨论】:

      • 感谢您的评论。我想我会使用 jwt 身份验证,因为我会使用 api。
      • 我这样做了,登录后, 将在 blazor 中呈现 部分,但仍在服务器端,HttpContext.User.Claims 为空,如果我将 [Authorize] 属性添加到一个控制器,它将返回一个未经授权的错误。你能帮帮我吗?
      猜你喜欢
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      相关资源
      最近更新 更多