安全 Rails 5 API

Secure Rails 5 API

我创建了一个 Rails 5 API 应用程序。我已将 GET 请求的方法设置为 return JSON。

数据仅由我维护,因此我希望应用程序对所有类型的数据创建或更新请求 return 401。 我怎样才能做到这一点?

此外,如果我在控制器文件中注释掉 def create、def update 函数,我将如何使用 POST 请求更新和创建数据?

AIM:-

Set up a secure API which accepts GET requests only from my domain and return 401 otherwise.

And accept POST, UPDATE and DELETE requests manually after authentication.

您需要为您的 API 设置令牌身份验证。要快速设置一个,您可以安装此 gem:

devise-token-auth

只需按照说明设置您的身份验证系统即可。这样您就可以控制谁经过身份验证可以向您的 API.

发出请求

这个 gem 太棒了,因为在安装后你只需要做一些非常小的调整就可以让它工作,因此,保护​​你的 API.

你最终可能会在你的控制器中做这样的事情

before_action: authenticate_user!, only: [:create, :update, ... Any other method you want to protect]`

编辑:详细说明

基本上您想保护您的一种或多种资源。您还需要使 API 无状态,因此它不会保存任何 session 数据。

安装 gem 后,您应该 运行:

rails g devise_token_auth:install User auth

这将创建一个用户模型,调整您的 routes.rb 以安装身份验证模块并创建迁移。

那你就得rails db:migrate

正如我所说,有很多方法可以保护您的资源,但最常见的方法之一是 运行 authenticate_user!在您的控制器中的 before_action 上:

before_action: authenticate_user!, only: [:create, :update, ... Any other method you want to protect]

基本上,从现在开始,用户对您的受保护方法发出的每个请求都需要经过身份验证。

我建议您阅读更多关于身份验证和 API 的内容。但是,基本上从现在开始,要向您的 API 发出请求,请求的 headers 将必须包含 UID、客户端和令牌。 如果它们不包括这些,将返回 401 状态作为响应。因此,保护​​您的 API 免受未经身份验证的请求。

一些有用的教程:

1) link 2) link2