【问题标题】:Secure Rails 5 API [closed]安全 Rails 5 API [关闭]
【发布时间】:2016-08-28 05:29:35
【问题描述】:

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

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

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

目标:-

设置一个仅接受来自我的域的 GET 请求的安全 API,否则返回 401。

并在身份验证后手动接受 POST、UPDATE 和 DELETE 请求。

【问题讨论】:

    标签: ruby-on-rails rails-api


    【解决方案1】:

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

    devise-token-auth

    只需按照说明设置您的身份验证系统即可。通过这种方式,您将能够控制谁通过身份验证向您的 API 发出请求。

    这个 gem 很棒,因为在安装后,您只需要进行一些非常小的调整即可使其正常工作,从而保护您的 API。

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

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

    编辑:详细说明

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

    一旦你安装了 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 发出请求,请求的标头必须包含 UID、客户端和令牌。 如果它们不包含这些,则会返回 401 状态作为响应。因此,保护​​您的 API 免受未经身份验证的请求。

    一些有用的教程:

    1) link 2)link2

    【讨论】:

    • 您能否详细说明如何为我的应用 [产品列表] 设置它?该文档基本上是关于用户的。我是 Rails 新手,对它了解不多。
    • 更新了回复,包含更详细的解决方案和一些有用的教程链接,我知道这些链接将对您非常有帮助:D
    • @Shivam 希望你觉得它有用。 :D
    • 没问题!如果您发现我的回答有助于解决您的问题,请标记为已接受的答案:)
    • 这真的很有帮助 :) 你能不能也回答一下:仅接收来自我的域的 GET 请求,否则返回 401?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2013-05-05
    • 2017-04-26
    • 2011-04-01
    • 2011-12-28
    • 2014-09-05
    • 2011-08-26
    相关资源
    最近更新 更多