我在我的rails應用程序中使用了sidekiq。 默認情況下,任何人都可以通過在url後添加「/ sidekiq」訪問Sidekiq。 我想密碼保護/只認證sidekiq部分。我怎樣才能做到這一點?如何密碼保護我的/ sidekiq路線(即要求對Sidekiq :: Web工具進行身份驗證)?
回答
把下面的內容sidekiq初始化
require 'sidekiq'
require 'sidekiq/web'
Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|
[user, password] == ["sidekiqadmin", "yourpassword"]
end
請見 「安全」 下https://github.com/mperham/sidekiq/wiki/Monitoring
Sidekiq :: Web應用Rack::Protection來保護您的應用程序對典型的Web攻擊(如CSRF,XSS等)。如果Rack :: Protection發現您的請求不符合安全要求,則Rack :: Protection會使您的會話無效並引發
Forbidden
錯誤。其中一種可能的情況是讓您的應用程序在反向代理之後工作,而不是將重要標題傳遞給它(X-Forwarded-For
,X-Forwarded-Proto
)。這樣的情況,可以找到解決辦法in this article和issue #2560 ...
如果你使用設計(或其它基於監獄長的身份驗證),你可以做到這一點,假設你的應用中有一個AdminUser模型。
# 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
另一種選擇是添加類似CanCan和基於角色的特殊訪問。
如果您使用Sorcery進行身份驗證,請使用how to use Rails routes constraints來保護某些路線。
從巫術維基這裏複製的冗餘:
本教程介紹瞭如何使用Rails的路線約束與法術寶石。感謝@anthonator寫作!
首先,定義UserConstraint
模塊將被用於所有的約束:
然後,將具有定義的模塊,您可以指定特定的約束類。在這些例子中,如果沒有用戶登錄第一條路線只會工作,第二個將只對誰是管理員登錄的用戶:
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
最後,可以約束添加到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
ok @kleopatra,那是怎麼回事? :-) – AlexChaffee
如果您正在滾動您自己的自定義身份驗證,則可以使用文檔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
對不起,遲到了,但Sidekiq's wiki建議制定如下:
允許任何身份驗證User
:
# config/routes.rb
authenticate :user do
mount Sidekiq::Web => '/sidekiq'
end
要限制User.admin?
# config/routes.rb
authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
訪問
This wiki post也有許多其他的安全方案。
這是使用Rails 5.1.3,設計4.3和5.0 Sidekiq
- 1. 如何要求在mongos路由器上進行身份驗證?
- 2. 如何在Visual Studio 2008中對受密碼保護的Web服務進行身份驗證的服務引用
- 3. 使用Web API進行身份驗證
- 4. Rails - 設計和sidekiq路線
- 5. Rails 5保護Sidekiq UI
- 6. 我如何要求對我的Angular模板進行身份驗證?
- 7. 如何基於設計加密密碼進行身份驗證?
- 8. 如何保護Azure ACS身份驗證?
- 9. 通過REST API進行身份驗證並保護API本身
- 10. Laravel 4身份驗證和受保護的路線
- 11. 使用PHP身份驗證密碼保護整個目錄
- 12. 使用API對私人路線進行身份驗證
- 13. 我將如何使用PHP對Linux用戶和密碼進行身份驗證?
- 14. Authlogic - 通過基本HTTP身份驗證進行身份驗證
- 15. 保護與色器件sidekiq管理(記錄方式不工作)
- 16. 如何保護不需要身份驗證的公共API?
- 17. 如何使用jMeter針對基本身份驗證保護域進行測試?
- 18. 如何驗證通過pymongo進行mongodb身份驗證的用戶名密碼?
- 19. 身份驗證受保護的nuget.server
- 20. 驗證asp.net身份密碼
- 21. 如何使用API密鑰對GitHub進行身份驗證?
- 22. 如何使用AWS身份驗證保護我的wcf服務
- 23. 使用Web服務進行身份驗證的自定義成員身份
- 24. 要求經過身份驗證的用戶更改密碼
- 25. Java - 使用公鑰和密碼進行身份驗證 - j2ssh
- 26. 如何在Web API中使用Api密鑰進行使用表單身份驗證的服務身份驗證
- 27. 通過Web請求進行Windows身份驗證C++/Node.js
- 28. 如何使用摘要身份驗證手動進行身份驗證?
- 29. 放入並刪除要求進行身份驗證:MVC 5
- 30. 如何通過腳本對appengine進行身份驗證請求?
測試BTW,我把我的Gemfile下面這樣我就不必手動需要在初始化和兩個sidekiq和sidekiq /網絡routes.rb文件:「gem'sidekiq',要求:['sidekiq','sidekiq/web']」 – odigity