首页 文章

具有ReactJS客户端的ExpressJS API服务器

提问于
浏览
0

我正在开发一个使用ExpressJS为客户端提供API和ReactJS数据的网站 . 我理解这应该如何在理论上起作用,在某种程度上它应该如何在技术上起作用,但我想确保我按照他们要做的方式做事 .

我的API服务器将提供一些公共和一些私人数据 . 对于私有,它需要身份验证(用户/通过API /login 路由传递) . 因此,如果我想在我的API上加载 /profile ,我需要经过身份验证的用户 . 我使用我的Express路由中包含的中间件来执行此操作 /profile . React在我的 /login API路由上发送POST请求后,我验证用户/密码,然后生成JWT令牌,用户和电子邮件作为有效负载(尽管不是密码) .

现在,我被困住了(安全方面) . 我希望我的ReactJS能够显示来自我的API服务器的数据,一旦用户登录,他应该能够访问任何其他受保护的路由 . 我在React中创建登录组件没有问题,也没有用它来获取数据 . 我的问题是,一旦用户使用ReactJS(使用输入表单)登录,并且他获得了他签名的JWT令牌(我后来保存在localStorage中),是否可以使用令牌有效负载中的解码用户部分来调用我需要的方法和函数在我的服务器端(Express)没有验证每个路由呼叫的用户/通行证?那安全性会好吗?我认为它会,因为JWT使用唯一键进行签名,即使它们存储在localStorage中并且可以访问它们,如果没有API服务器没有注意到(在验证期间),它们也无法进行调整 . 通常使用仅限Express的解决方案,我会在每个用户的DB中存储会话,并不断检查cookie中保存的客户端会话,但这有点不同而且令人困惑 .

我想我的简短问题是 - 如何在ExpressJS Backend和ReactJS Frontend之间进行正常的安全用户身份验证?有关其他信息,我的API还具有CRUD功能(用于添加/更改数据的 endpoints ) . 我想如果有人能确认我是否正确做事,如果没有指出我可以找到更多信息的资源 . 如果可能的话,我想避免第三方授权服务 .

PS . 我在stackoverflow和互联网的其他角落上阅读了无数其他线程,我无法真正找到我正在寻找的东西 .

1 回答

  • 0

    一旦用户收到Jwt并将其正确存储在localStorage上,您应该在每个后续请求中使用此JWT . 通常作为持票人令牌 . 服务器将检查它是否是有效令牌,然后反序列化用户的数据并使用此数据来检索用户的特定信息(通常通过id) .

相关问题