【问题标题】:How do I secure a static client blazor app with Azure functions backend? [closed]如何使用 Azure 函数后端保护静态客户端 Blazor 应用? [关闭]
【发布时间】:2020-09-26 08:36:02
【问题描述】:

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

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

另一方面的身份验证是完全不同的事情。当谈到如何真正正确地保护我的应用程序并且只允许人们在登录后进入时,我有点迷茫。

然而,在阅读了一些关于如何做安全的文章之后,我还有一些问题没有得到解答。

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

  2. 如果我正确地完成了身份验证部分,我的客户端应用程序应该如何反映登录状态?鉴于后面没有服务器,我不能只使用 MVC 控制器来分发“登录”视图或“登录”视图,具体取决于客户端的身份验证状态。

如果有人可以在这里给我一些指导,那就太好了。

【问题讨论】:

    标签: c# authentication azure-functions blazor


    【解决方案1】:

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

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

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

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

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

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

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

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

    1. 您可以使用 Microsoft 提供的软件包自行生成令牌,并使用 Microsoft.AspNetCore.Authentication.JwtBearer 对其进行验证,
    2. 如果您认为以后会添加更多客户端,例如移动应用程序,您可能需要考虑给IdentityServer 一个机会。有一个新包使用 ASP.NET Core Identity 在模板中抽象出大部分 IdentityServer4。不过,如果您只打算拥有一个 Blazor 应用程序,这可能有点过头了。

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

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

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

    【讨论】:

    • 谢谢,这很有见地。这确实是一个宽泛的问题,但我想这主要是因为我还没有达到可以理解详细问题的程度。
    猜你喜欢
    • 2020-07-11
    • 2012-11-29
    • 1970-01-01
    • 2021-07-19
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2019-09-15
    相关资源
    最近更新 更多