ruby-on-rails - 使用 authlogic_api 访问 Rails REST API

标签 ruby-on-rails ruby security rest authlogic

我正在为只能通过 REST 调用访问的 Steam 游戏编写 Rails 后端 API,因此不需要特定于用户的身份验证。我正在尝试实现 authlogic_api plug-in对于 Authlogic gem,它使用 api_key/signature 机制来限制访问。我已经实现了 rdoc 中概述的 ApplicationSessionApplicationAccount 模型,但我不确定如何修改我的 ApplicationController 以限制访问。

查看源代码,似乎 authlogic_api 插件修改了 Authlogic 的 ActsAsAuthenticSession 模块。但由于这本质上是“单一访问”身份验证,需要在每个请求上传递 API key 和签名,所以我不认为 session 是一个因素。

有人在他们的应用程序中成功实现了 authlogic_api 吗?如果是这样,您是否可以分享您设置 ApplicationController 的方法?

最佳答案

其实,要简单得多。使用 Authlogic 示例中的所有代码有点矫枉过正 - 它主要管理存储 session 详细信息,您不需要为应用程序(也称为客户端) session 执行此操作。每次请求都会重新确认客户端 session 。

您只需要:

models\client.rb

class Client < ActiveRecord::Base
  acts_as_authentic do |config|
  end
end

models\client_session.rb

class ClientSession < Authlogic::Session::Base
  api_key_param 'app_key'
end

controllers\application_controller

before_filter :verify_client

def verify_client
  @client_session = ClientSession.new()
  unless @client_session.save # if client session not successfully created using the api_key and signature, render an error and block the request
    @error = {:description => "Couldn't validate client application."}
    render :template => 'errors/error.xml.builder'
  end
end

您还需要运行迁移来创建客户表。并非以下所有字段都是必需的,但它们不会造成伤害。

class CreateClients < ActiveRecord::Migration
  def self.up
    create_table :clients do |t|
      # human fields
      t.string :name
      t.string :owner
      t.string :owner_email
      t.string :owner_phone
      # login fields
      t.string :api_key, :null => false
      t.string :api_secret, :null => false
      t.string :password_salt
      t.string :persistence_token
      t.string :perishable_token
      # automagical fields (courtesy of authlogic & authlogic_api)
      t.integer :failed_login_count
      t.datetime :last_request_at
      t.integer :request_count
      t.string :last_request_ip
      # automagical fields (courtesy of rails)
      t.timestamps
    end
  end

  def self.down
    drop_table :clients
  end
end

关于ruby-on-rails - 使用 authlogic_api 访问 Rails REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3111869/

相关文章:

java - 更改 Java 安全级别

php - 是否有可能欺骗您的 IP... 测试 IP 地址安全吗?

ruby - 在 ruby​​ 中对 JSON 哈希数组进行排序

ruby-on-rails - 阻止将重复项添加到 Ruby 对象数组中

android - 证书固定绕过实践的示例 apk

ruby-on-rails - 在Rails中实现NullObject模式

ruby-on-rails - RSpec Controller 测试未引发错误

ruby-on-rails - 如何使用 rails 4.2.7 和 ruby​​ 2.3.3 创建 rails api 项目?

ruby-on-rails - Ruby/Rails Net::HTTP.post_form 嵌套哈希项 html 转义

ruby-on-rails - Capybara 和 Poltergeist 的 save_screenshot 的未定义方法