c# - 如何使用 Azure 函数后端保护静态客户端 Blazor 应用程序?

标签 c# authentication azure-functions blazor

<分区>

所以,我想了解一下目前正在进行的整个无服务器和静态 Web 应用主题。

我的计划是创建一个作为静态网站托管的 C# 客户端 blazor 应用程序,并使用 C# Azure Functions 执行后端工作。到目前为止,一切都很好。处理我所有功能的代码似乎尽可能简单。

另一端的身份验证是一个完全不同的问题。关于如何真正正确地保护我的应用程序,并且只允许人们在登录后进入,我有点不知所措。

但是,在阅读了一些关于如何进行安全性的阅读之后,我仍然有一些问题没有得到解答。

  1. 如何在我的应用程序中进行身份验证和安全保护?我正在阅读以下文章:https://learn.microsoft.com/de-de/archive/blogs/stuartleeks/azure-functions-and-app-service-authentication这解释了如何在 Facebook、Google 等身份验证提供商的范围内实现安全性。但是,从 Asp.Net Identity 背景来看,我如何才能真正使用我的自定义身份设置?例如,我想提供一种在我的客户端 blazor 应用程序中注册和登录的方法,我希望我能在这里找到类似 Identity 的东西,它负责用户管理等。

  2. 如果我正确地完成了身份验证部分,我的客户端应用程序应该如何表现以反射(reflect)登录状态?鉴于后面没有服务器,我不能只使用 MVC Controller 之类的东西来分发“登录” View 或“登录” View ,具体取决于客户端的身份验证状态。

如果有人能在这里给我一些指导就太好了。

最佳答案

这对于 StackOverflow 来说有点过于宽泛,但让我以不同的方式分解这个问题并解释如何做到这一点。

您在这里有三个主要要求:

  1. 管理用户(登录、注册等)
  2. 在服务器端,判断用户是否登录。
  3. 在客户端,判断用户是否登录。

那么让我们看看在每种情况下该怎么做。

管理用户(登录、注册等)

首先要记住的是,ASP.NET Core Identity 要求您使用它附带的 Razor Pages UI。您甚至不必使用最初搭建的任何东西。没有什么可以阻止您拥有功能/事件/端点/等,您可以向其传递用户名/密码并对用户进行身份验证。与注册和身份框架的其余部分相同。
如果您不想重新发明轮子,而且您肯定不应该这样做,因为这是一个安全框架,您可以使用 ASP.NET Core Identity。

在服务器端判断用户是否登录

多种方法可以做到这一点。由于您的客户端是基于 Web 的客户端,因此您可以在 token (例如 JSON Web Tokens (JTW))和 cookie 之间做出选择。但是,由于您在 SPA 上工作,现在的建议是使用 JWT。您至少有两种方法可以实现这一目标:

  1. 您可以使用 Microsoft 提供的包自行生成 token ,并使用 Microsoft.AspNetCore.Authentication.JwtBearer 验证它们,
  2. 如果您认为稍后会添加更多客户端,例如移动应用程序,您可能需要调查给予 IdentityServer一个机会。有一个新包使用 ASP.NET Core Identity 在模板中抽象出大部分 IdentityServer4。不过,如果您只打算拥有单个 Blazor 应用程序,这可能有点矫枉过正。

显然,您也可以查看第三方框架,但在考虑它们之前,您需要确保从安全角度来看,它们的代码已经过适当验证。

在客户端判断用户是否登录

关于这部分我不能给你太多信息,因为我没有使用过 Blazor。但是,很可能有一些授权属性或授权给定路由的方法,就像可以在 Angular 和 React 中完成的那样。我建议你看这里:ASP.NET Core Blazor authentication and authorization .
要记住的要点是,您的登录端点将向客户端返回生成的 JWT(前两点的混合),您可以轻松地在客户端中看到 JWT 的值(如用户名)。

关于c# - 如何使用 Azure 函数后端保护静态客户端 Blazor 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64075574/

相关文章:

c# - Rabbitmq Ack 或 Nack,将消息留在队列中

ios - Alamofire 使凭证无效

asp.net - 如何将 Auth0 与现有 ASP.NET Core Identity 数据库结合使用?

wcf - 简单登录

c# - System.Net.Http 依赖问题

c# - 在检查器中显示数组 (Unity)

c# - 如何在 C# 中访问另一个类中的列表

c# - 如何为 Razor View 创建默认的 AjaxOptions?

python - Azure 函数以最大间隔超时,而调用尚未达到最大间隔

c# - 间歇性依赖注入(inject)失败