2012-09-04 45 views

Respuesta

75

Ponga lo siguiente en su inicializador sidekiq

require 'sidekiq' 
require 'sidekiq/web' 

Sidekiq::Web.use(Rack::Auth::Basic) do |user, password| 
    [user, password] == ["sidekiqadmin", "yourpassword"] 
end 
+2

BTW-pongo el siguiente en mi Gemfile por lo que no tendría que requerir manualmente sidekiq y sidekiq/web, tanto en el inicializador y la archivo routes.rb: "gem 'sidekiq', requiere: ['sidekiq', 'sidekiq/web']" – odigity

13

Ver "Seguridad" bajo https://github.com/mperham/sidekiq/wiki/Monitoring

Sidekiq :: Web utiliza Rack::Protection proteger su aplicación contra los ataques web típicos (como CSRF, XSS, etc). Rack :: Protection invalidaría su sesión e incrementaría el error Forbidden si considera que su solicitud no cumple con los requisitos de seguridad. Una de las posibles situaciones es que su aplicación funcione detrás de un proxy inverso y no le pase encabezados importantes (X-Forwarded-For, X-Forwarded-Proto). Tal situación y la solución se podían encontrar in this article y issue #2560 ...

7

Si está utilizando Idear (o de otro tipo de autenticación basada en Warden), puede haz esto, suponiendo que tienes un modelo de administrador de usuarios en tu aplicación.

# config/routes.rb 
# This defines the authentication constraint 
constraint = lambda do |request| 
       request.env['warden'].authenticate!({ scope: :admin_user }) 
      end 

# This mounts the route using the constraint. 
# You could use any other path to make it less obvious 
constraints constraint do 
    mount Sidekiq::Web => '/sidekiq' 
end 
0

Otra opción sería agregar algo como CanCan y acceso especial basado en roles.

0

Si está utilizando Sorcery para la autenticación, aquí está how to use Rails routes constraints para proteger ciertas rutas.


copiado aquí desde el wiki de la hechicería para la redundancia:

Este tutorial muestra cómo utilizar Rieles de las rutas de las limitaciones con la gema Hechicería. ¡Gracias a @anthonator por escribirlo!

En primer lugar, defina UserConstraint módulo que será utilizado para todas las limitaciones:

Entonces, teniendo dicho módulo definido, puede especificar las clases de restricciones específicas. En estos ejemplos, primera ruta sólo funcionará si no hay ningún usuario conectado, el segundo sólo funcionará para el usuario de inicio de sesión que es un administrador:

class RouteConstraints::NoUserRequiredConstraint 
    include RouteConstraints::UserConstraint 

    def matches?(request) 
    !current_user(request).present? 
    end 
end 

class RouteConstraints::AdminRequiredConstraint 
    include RouteConstraints::UserConstraint 

    def matches?(request) 
    user = current_user(request) 
    user.present? && user.is_admin? 
    end 
end 

Finalmente, puede agregar las restricciones a la config/routes.rb:

MyApp::Application.routes.draw do 

    # other routes … 

    root :to => 'admin#dashboard', :constraints => RouteConstraints::AdminRequiredConstraint.new 
    root :to => 'home#welcome', :constraints => RouteConstraints::NoUserRequiredConstraint.new 

end 
+0

ok @kleopatra, ¿cómo es eso? :-) – AlexChaffee

3

Si está activando su propia autenticación personalizada, puede usar el ejemplo siguiente al que se hace referencia en los documentos here.

# lib/admin_constraint.rb 
class AdminConstraint 
    def matches?(request) 
    return false unless request.session[:user_id] 
    user = User.find request.session[:user_id] 
    user && user.admin? 
    end 
end 

# config/routes.rb 
require 'sidekiq/web' 
require 'admin_constraint' 
mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new 
4

Siento tarde a la fiesta, pero Sidekiq's wiki recomienda lo siguiente para Diseñar:

para permitir que cualquier autenticado User:

# config/routes.rb 
authenticate :user do 
    mount Sidekiq::Web => '/sidekiq' 
end 

para restringir el acceso a User.admin?

# config/routes.rb 
authenticate :user, lambda { |u| u.admin? } do 
    mount Sidekiq::Web => '/sidekiq' 
end 

This wiki post también tiene muchos otros esquemas de seguridad.

Esto fue probada usando Rails 5.1.3, idearán 4.3 y 5.0 Sidekiq

Cuestiones relacionadas