所以,我想了解一下目前正在进行的整个无服务器和静态 Web 应用主题。
我的计划是创建一个作为静态网站托管的 C# 客户端 blazor 应用程序,并使用 C# Azure Functions 执行后端工作。到目前为止,一切都很好。处理我所有功能的代码似乎尽可能简单。
另一端的身份验证是一个完全不同的问题。关于如何真正正确地保护我的应用程序,并且只允许人们在登录后进入,我有点不知所措。
但是,在阅读了一些关于如何进行安全性的阅读之后,我仍然有一些问题没有得到解答。
如何在我的应用程序中进行身份验证和安全保护?我正在阅读以下文章:https://learn.microsoft.com/de-de/archive/blogs/stuartleeks/azure-functions-and-app-service-authentication这解释了如何在 Facebook、Google 等身份验证提供商的范围内实现安全性。但是,从 Asp.Net Identity 背景来看,我如何才能真正使用我的自定义身份设置?例如,我想提供一种在我的客户端 blazor 应用程序中注册和登录的方法,我希望我能在这里找到类似 Identity 的东西,它负责用户管理等。
如果我正确地完成了身份验证部分,我的客户端应用程序应该如何表现以反射(reflect)登录状态?鉴于后面没有服务器,我不能只使用 MVC Controller 之类的东西来分发“登录” View 或“登录” View ,具体取决于客户端的身份验证状态。
如果有人能在这里给我一些指导就太好了。
这对于 StackOverflow 来说有点过于宽泛,但让我以不同的方式分解这个问题并解释如何做到这一点。
您在这里有三个主要要求:
- 管理用户(登录、注册等)
- 在服务器端,判断用户是否登录。
- 在客户端,判断用户是否登录。
那么让我们看看在每种情况下该怎么做。
管理用户(登录、注册等)
首先要记住的是,ASP.NET Core Identity 不要求您使用它附带的 Razor Pages UI。您甚至不必使用最初搭建的任何东西。没有什么可以阻止您拥有功能/事件/端点/等,您可以向其传递用户名/密码并对用户进行身份验证。与注册和身份框架的其余部分相同。
如果您不想重新发明轮子,而且您肯定不应该这样做,因为这是一个安全框架,您可以使用 ASP.NET Core Identity。
在服务器端判断用户是否登录
有多种方法可以做到这一点。由于您的客户端是基于 Web 的客户端,因此您可以在 token (例如 JSON Web Tokens (JTW))和 cookie 之间做出选择。但是,由于您在 SPA 上工作,现在的建议是使用 JWT。您至少有两种方法可以实现这一目标:
- 您可以使用 Microsoft 提供的包自行生成 token ,并使用 Microsoft.AspNetCore.Authentication.JwtBearer 验证它们,
- 如果您认为稍后会添加更多客户端,例如移动应用程序,您可能需要调查给予 IdentityServer一个机会。有一个新包使用 ASP.NET Core Identity 在模板中抽象出大部分 IdentityServer4。不过,如果您只打算拥有单个 Blazor 应用程序,这可能有点矫枉过正。
显然,您也可以查看第三方框架,但在考虑它们之前,您需要确保从安全角度来看,它们的代码已经过适当验证。
在客户端判断用户是否登录
关于这部分我不能给你太多信息,因为我没有使用过 Blazor。但是,很可能有一些授权属性或授权给定路由的方法,就像可以在 Angular 和 React 中完成的那样。我建议你看这里:ASP.NET Core Blazor authentication and authorization .
要记住的要点是,您的登录端点将向客户端返回生成的 JWT(前两点的混合),您可以轻松地在客户端中看到 JWT 的值(如用户名)。