当前位置: 首页 > 知识库问答 >
问题:

使用React钩子、.NET核心Web API和SQL Server实现身份验证和授权

巩光誉
2023-03-14

我使用React钩子、SQL Server数据库和。NET Core3.1 Web API构建了一个应用程序。我真的很难理解所有运动部件的关系。我希望避免重新发明轮子,并利用现有的库和框架。从我所学到的来看,JWT似乎是这样的,它只是有点混乱。以下是我的要求:

    null

我想我在所有的脱钩中迷失了(这通常是一件好事!)我看到关于用虚拟后端反应的文章,我迷路了。我看到关于。NET核心的帖子,不知道如何将其与React一起使用。从概念上讲,它的大部分都是有意义的,但我还没有找到一个地方可以帮助我理解代码从开始到结束应该是什么样子。

以下是我的问题!

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

这有很多东西要整理,我只是希望有人能帮我简化。

共有1个答案

钱旻
2023-03-14

>

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

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

    IdentityServer4是一个身份验证框架,它实现了OpenID Connect和OAuth 2.0协议,并在默认情况下使用JWT auth。
    使用它将获得身份验证行为,例如包括登录和注销(它实际上带有自己的登录页面(login.cshtmllogout.cshtml)),但不包括注册。
    建议将它单独用于该目的,您可以建议以下两个答案来更好地理解处理身份验证时关注点的分离(尽管问题的标题涉及用户创建,但答案也专门涉及身份验证):

    • 使用identityserver4的用户注册过程
    • 将用户数据存储在auth服务器还是资源服务器中?还是两者兼而有之?

    如果您想为应用程序添加更多的安全性,您将在JWT中有一个exp声明。如果您有exp声明,并且不希望易读用户在每次JWT过期时都重新登录,那么您将使用刷新令牌。您可以使用刷新令牌来获取新的访问令牌。如果您将使用IdentityServer4,则已经为您实现了刷新令牌,尽管您必须显式配置它们。告知以下消息来源:

    • IdentityServer4刷新令牌文档。
    • 一个完整的教程,也解释了如何使用刷新标记。

    还有,我不知道你读的那100篇文章是什么:)但我认为下面的帖子很棒:

    • 使用JWT令牌身份验证时是否真的需要刷新令牌?。
    • JWT刷新令牌流。
    • JWT refresh_token中包含哪些内容?

  •  类似资料:
    • 我的问题和这个差不多。 ASP。Net Core与EF Core和CosmosDB-身份问题 提供的答案不起作用。这会产生其他问题。当我从升级我的应用程序时,这些错误开始出现。NET Core 3.1 to。净5。降级应用程序使所有错误都消失了。显然,这个问题与efcore 5中引入的对cosmos的乐观并发支持有关。 https://docs.microsoft.com/en-us/ef/cor

    • 我正在开发ASP NET核心Web API,对认证方式的选择感到困惑。我曾经应用默认的Asp Net身份验证,但最近我知道了JWT。因此,我几乎像本文中一样实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。但是我不能理解这个JWT的好处。通过简单的Asp Net身份认证,我不关心令牌存储等,我只需要用signI

    • 问题内容: 我一直在努力用Spring-Security 正确实现Stomp(websocket) 身份验证 和 授权 。 为了后代,我将回答我自己的问题以提供指导。 问题 Spring WebSocket文档(用于身份验证)看起来不清楚ATM(IMHO)。而且我不明白如何正确处理 身份验证 和 授权 。 我想要的是 使用登录名/密码对用户进行身份验证。 防止匿名用户通过WebSocket连接。

    • 我不熟悉spring微服务世界。由于我处于学习阶段,我尝试并实施了以下内容。 > 路由(能够使用Spring云网关进行路由) 负载平衡(Netflix Eureka) 限速和断路器 我只需要一些澄清和建议,说明在这些情况下该怎么做: 因为我已经创建了身份验证/授权作为一个单独的微服务集中。现在我如何实现这样的每个请求必须包含jwt令牌和通过API网关调用其他微服务也应该检查哪个用户有权限访问其他微

    • 在我的ASP.NET核心web api中,我已经按照MS文档中的文章配置了Cors。web api应用程序正在使用windows身份验证(未启用匿名身份验证)。创建Cor的策略,并在< code>startup.cs中添加中间件,如下所示 还应用了每个控制器级别的策略 选项请求越来越未经授权。请求 我见过类似的问题,也尝试过几乎所有的解决方案,但选项请求仍然失败。