使用 React hooks、.NET Core Web API 和 SQL Server 实现身份验证和授权

mat*_*c15 9 authentication jwt reactjs asp.net-identity .net-core

我有一个使用 React hooks、SQL Server 数据库和 .NET Core 3.1 Web API 构建的应用程序。我真的很难理解所有活动部件之间的关系。我想避免重新发明轮子并利用现有的库和框架。根据我所学到的知识,JWT 似乎是通往这里的方法,但它只是有点令人困惑。这是我的要求:

  1. 创建帐户并使用自定义网站帐户登录/注销或使用 Google/Facebook/Microsoft/等。(我可以从其中一个开始,但不想把自己限制在里面并重写大量的东西来添加另一个)
  2. 利用现有项目中的.NET Core Identity来处理SQL Server数据库中的用户、角色等。
  3. 使用 React hooks 模式(如果必须的话,我可以通过翻译类组件来一瘸一拐)

我认为我在所有的解耦中迷失了(这通常是一件好事!)我看到有关带有虚拟后端的 React 的文章,然后我迷失了。我看到有关 .NET Core 的帖子,但不知道如何将它与 React 一起使用。从概念上讲,大部分内容都是有意义的,但我还没有找到一个地方可以帮助我从头到尾理解代码应该是什么样子。

这是我的问题!

  1. React 前端应用程序和 React auth 服务是同一件事吗?他们可以吗?他们一定是吗?
  2. JWT字符串是在React端还是.NET端生成的?最好的图书馆?
  3. MS Identity Server 如何(或者是否?)符合这个等式?
  4. 尽管看了大约 100 篇文章,但我并不完全理解刷新令牌的概念。刷新令牌是 100% 必要的吗?使用/不使用它们的好处/缺点?

有很多事情需要整理,我只是希望有人能帮助我简化。

Hey*_*ude 12

  1. React 应用程序中处理身份验证的部分自然应该是一个组件,然后由应用程序的其他部分(例如,通过登录组件)导入。您可以在此处查看示例教程。

  2. JWT 在服务器端生成,在您的例子中是 .NET Core。它必须在服务器端创建,因为在客户端生成它意味着其中包含秘密,以便攻击者可以窃取它并创建有效的令牌。另请参阅此答案
    至于生成它:您可以自己生成它,或者只使用身份验证框架(例如,IdentityServer4)或第三方身份验证(例如,使用Google登录),以便为您生成它。如果您确实决定自己生成它,我认为您不需要复杂的东西(我的意思是,您甚至不需要像JWT.NET这样的库)。只需使用一个简单的教程,就像这个一样。

  3. IdentityServer4是一个身份验证框架,它实现了OpenID Connect和OAuth 2.0协议,并且默认使用JWT身份验证。
    使用它将为您提供身份验证行为,包括例如登录和注销(它实际上带有自己的登录页面(Login.cshtmlLogout.cshtml)),但不是注册。
    建议仅将其用于此目的,并且您可以建议以下两个答案,以更好地理解处理身份验证时的关注点分离(尽管问题的标题涉及用户创建,但答案也专门针对身份验证):

  4. 如果您想为您的应用程序添加更多安全性,您将exp在 JWT 中提出声明。如果您有exp索赔,并且不希望清晰的用户每次 JWT 过期时都必须重新登录,您将拥有刷新令牌。您使用刷新令牌来获取全新的访问令牌。如果您将使用 IdentityServer4,刷新令牌已经为您实现,但您必须显式配置它们。建议以下来源:

    另外,我不知道你读的那 100 篇文章是什么:),但我认为以下这些帖子很棒:


归档时间:

查看次数:

8418 次

最近记录:

5 年 前