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

时间:2018-08-14 16:15:38

标签: reactjs api express jwt

我正在开发一个网站,该网站使用ExpressJS作为客户端的API和ReactJS数据。我了解这在理论上应该如何工作,并且在某种程度上应该从技术上来说应该如何工作,但是我想确保我以应有的方式做事。

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

现在这是我被卡住的原因(出于安全考虑)。我希望我的ReactJS能够显示来自我的API服务器的数据,并且一旦用户登录,他就应该能够访问任何其他受保护的路由。我在React中制作登录组件也没有问题,也没有问题。我的问题是,一旦用户使用ReactJS(具有输入形式)登录,并且他获得了签名的JWT令牌(我稍后将其保存在localStorage中),是否可以使用令牌有效负载中已解码的用户部分来调用我需要的方法和函数在我的服务器端(Express)上没有为每个路由调用验证用户/通行证?在安全方面明智吗?我猜想会这样,因为JWT是用唯一密钥签名的,即使它们存储在localStorage中并且可以访问,如果没有API服务器不注意的话(在验证过程中),也不能对其进行调整。通常,使用仅Express的解决方案,我将为每个用户将会话存储在DB中,并不断检查保存在cookie中的客户端会话,但这有些不同并且令人困惑。

我想我的简短问题是-如何在ExpressJS后端和ReactJS前端之间进行常规的安全用户身份验证?有关其他信息,我的API还具有CRUD功能(用于添加/更改数据的端点)。我希望有人可以确认我是否做正确的事情,是否不能将我指向可以找到更多信息的资源。如果可能的话,我想避免第三方验证服务。

ps。我读了无数关于Stackoverflow和互联网其他角落的其他线程,而我却找不到我想要的东西。

1 个答案:

答案 0 :(得分:0)

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