Пароль, защищающий среду промежуточных рельсов

Я пытаюсь понять, каким будет лучший способ защитить мою промежуточную среду. В настоящее время я запускаю как постановку, так и выпуск на том же сервере.

Два возможных варианта:

Использовать аутентификацию рельсов

Я мог бы добавить что-то подобное в application_controller.rb

# Password protection for staging environment
if RAILS_ENV == 'staging'
  before_filter :authenticate_for_staging
end

def authenticate_for_staging
  success = authenticate_or_request_with_http_digest("Staging") do |username|
    if username == "staging"
      "staging_password"
    end
  end
  unless success
    request_http_digest_authentication("Admin", "Authentication failed")
  end
end

Это было разорвано из блог Райана Дайгла. Я запускаю последнюю версию Rails 2.3, поэтому я должен быть свободен от проблем безопасности, которые у них были с этим.

Использовать аутентификацию веб-сервера

Я мог бы также добиться этого с помощью разрешений .htaccess или apache, однако это немного упрощает настройку моего сервера (я использую Chef и для разных целей требуются разные конфигурации apache).


На данный момент у меня есть первый реализованный и работающий, вы видите проблемы с ним? Я пропустил что-то очевидное? Спасибо заранее!

Ответ 1

ударяя это, чтобы помогать другим, как и я, когда я читал это, прежде чем оседать на подобном, но более чистом решении.

# config/environments/staging.rb

MyApp::Application.configure do
  config.middleware.insert_after(::Rack::Lock, "::Rack::Auth::Basic", "Staging") do |u, p|
    [u, p] == ['username', 'password']
  end

 #... other config
end

Я написал короткое сообщение в блоге об этом.

Ответ 2

Если вы развертываете в многоуровневых средах, и поэтому у вас есть производственная среда и промежуточная среда, вам нужно добавить эти строки только в config/environment/staging.rb

MyApp::Application.configure do
  # RESTRICTING ACCESS TO THE STAGE ENVIRONMENT
  config.middleware.insert_before(::Rack::Runtime, "::Rack::Auth::Basic", "Staging") do |u, p|
    u == 'tester' && p == 'secret'
  end

  ...

end

Таким образом, вам не нужно настраивать Apache.

Я использую Ruby 2 с Rails 4, и он работает как шарм!

Ответ 3

Я бы пошел с базовой аутентификацией http, я не вижу никаких неотъемлемых проблем.