使用Rails后端从React Landing Page安全通信?

时间:2018-04-18 12:27:12

标签: ruby-on-rails reactjs http authentication

我在React中构建了一个登陆页面,其中访问者提交了一些数据(包括姓名和电话),这些数据通过HTTP发送到Rails 4.2后端。

现在,为了使着陆页能够将数据发布到后端,需要进行某种身份验证,因为只有注册的工作人员才能访问数据。 Rails后端目前使用常规的Devise用户/密码登录到后端。

我考虑过制作虚拟帐户并在登录页面的POST标题上对授权令牌进行硬编码,但这显然是一个很大的安全漏洞,因为任何人都可以在提交表单时看到硬编码令牌。

如何保护目标网页以用户无关的方式向后端服务器发送/接收数据(因为访问者不会创建帐户,他们只是填写表格及其详细信息)?

2 个答案:

答案 0 :(得分:1)

我不是rails用户。但至于你的API,就像几乎所有RESTful API后端一样,我认为rails具有公共/私有API的概念。我会创建用于从用户公开获取数据的API,以便人们可以在没有身份验证的情况下发送他们的信息,并且其他API路由是私有的。

在java spring框架中,我可以允许每个人都可以访问API路由,例如登录和通用(无私有信息)API路由,并且每个其他API路由都是私有的,需要身份验证(如auth-token)。

答案 1 :(得分:0)

当您执行登录流程并且用户输入密码并点击发送时,一旦您的后端验证详细信息,您将不得不使用JWT **(Json Web令牌)创建签名授权令牌并发送此授权令牌到前端。

然后,每当前端调用后端时,它必须在进行API调用之前将此标记附加到标头中。并且后端应该对令牌进行解码以找出哪个用户正在请求它以及ttl *是否在作为发布令牌的限制内。

如果两种情况都通过,后端应该发送请求的数据,或者它应该发送HTTP CODE-403 / Forbidden,然后应该在前端处理以注销用户并打开登录页面试。

*(生存时间根据此令牌自签发/登录时起有效的小时数计算)

** JWT基本上是用户数据的base-64编码数据(并由你的后端用唯一键签名)。用户的解码JWT令牌很可能如下所示:

--env=prod