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

使用ASP.NETCore后端和React前端的Web应用程序中的授权和身份验证?

董弘新
2023-03-14

我有一个 Web 应用程序,其中前端是使用 react.js 和 typescript 构建的,后端是使用 Core 3.1 构建的 ASP.NET 并连接到 SQL Server。SQL Server 用于保存数据,我可以在前端输入数据。

现在,我想实现一个自定义身份验证系统,在其中我可以使用授权保护不同的endpoint。我知道有几种方法可以选择,但我不想使用服务/库,例如,用户可以使用他的谷歌帐户登录。

在我看来,Jwt似乎是一个很好的方法,但我真的不了解整个系统。

这篇文章已经帮助了我很多:使用 React 钩子、.NET Core Web API 和 SQL Server 实现身份验证和授权。阅读本文后,我不明白登录与我的后端如何知道用户已登录(用于保护我的endpoint)之间的关系。

当然,我已经阅读了许多关于ASP.NET核心认证和授权的文章。我了解过不同的服务,例如:

  • Auth0(似乎不是一个好主意,因为您可以使用谷歌等登录)
  • IdentityUI(看起来不错,我看过一些 youtube 教程,但它们都使用另一个项目结构,其中前端和后端没有分开。所以他们正在使用像 Login.cshtml 这样的剃刀页面,但我不想在后端呈现任何页面,只在前端)

为了在后端对我的控制器进行授权,我计划使用以下内容:

    [Authorize] // to protect endpoint
    [HttpGet]
    public async Task<IEnumerable<>> GetData()
    {
        // some code
    }

但正如我已经说过的:我不知道/不理解我的后端如何知道用户是否登录(以及如何检查)。

有人能给我提供一个适当的教程或文章,解释,如何管理前端和后端的授权和认证?或者可能有人知道,如何将IdentityUI与带有react typescript的前端构建和后端一起使用,后者不应呈现任何页面。

感谢您的关注:)

共有1个答案

牧飞鹏
2023-03-14

良好的...关于他们如何工作的详细流程,这里是RFC 6749,这是一个与主题相关的知识的非常全面的集合,最简单的方法通常是wiki页面。

但是为了简化过程,只需了解以下事项:

什么是智威汤逊

Jwt只是由某个算法从公钥/私钥对中生成的字符串(甚至不关心它是如何工作的,只需给它一个密钥对,其他的都由每种语言上的一些lib完成)。这个JWT通常包含指定用户是谁所需的所有信息(大字对吧?但实际上,userId对于简单情况来说已经足够了)。

它包含 3 个不同的部分标头、有效负载和签名,并且字符串确保它不会被中断(或者只是根据需要修改它,验证过程将失败)。

更多细节在这里。

服务器端发生了什么?

最基本的流程是向服务器发送用户、密码,以验证我们是谁以及我们的帐户是否存在。然后,服务器端会从中获取一些必要的信息来生成JWT令牌。生成JWT令牌的服务器通常参考身份提供者

然后,令牌被发送回客户机,客户机将其保存在某个地方供以后使用。

客户端使用令牌请求其他资源

通常情况下,标识提供者会提供一个. well知道endpoint,其中包含其他资源为验证过程收集的所有必要信息。

现在,客户端使用JWT令牌向这些资源发送http请求。他们使用从<code>收集的信息。众所周知要验证的endpoint是JWT有效的。如果是这样,我们就是我们所宣称的自己,那么身份验证过程就成功了。

结束。

在你的具体案例中过于简单的流动想象

React客户端=

React客户端=

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

  • 我在决定如何为一个RESTful API实现身份验证时遇到了一些麻烦,该API既可供web应用程序使用,也可供移动应用程序使用。 首先,我想研究HTTPS上的HTTP基本身份验证作为一种选择。对于移动应用程序来说,用户名和密码可以安全地存储在操作系统钥匙链中,并且在传输过程中无法被拦截,因为请求是通过HTTPS发出的。对于API来说,它也很优雅,因为它将是完全无状态的。问题在于web应用程序。将无

  • null 事实上,当我在真正的设备上运行应用程序时,它运行得非常完美,我可以登录。

  • 我使用React钩子、SQL Server数据库和。NET Core3.1 Web API构建了一个应用程序。我真的很难理解所有运动部件的关系。我希望避免重新发明轮子,并利用现有的库和框架。从我所学到的来看,JWT似乎是这样的,它只是有点混乱。以下是我的要求: null 我想我在所有的脱钩中迷失了(这通常是一件好事!)我看到关于用虚拟后端反应的文章,我迷路了。我看到关于。NET核心的帖子,不知道如

  • null 事实上,当我在一个真实的设备上运行该应用程序时,它运行得很好,我可以登录。