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