![](/img/trans.png)
[英]How to use omniauth-google-oauth2 gem with incremental authorization in Rails?
[英]Is The Rails Gem 'omniauth-google-oauth2' Secure / How Does request.env work?
我已經使用https://github.com/zquestz/omniauth-google-oauth2上給出的示例模式在我的rails / devise應用程序中實現了“ omniauth-google-oauth2” gem。 但是,我擔心這種模式並不安全。
我試圖查看git hub上的源代碼,以及https://developers.google.com/identity/sign-in/web/devconsole-project上的 Google官方文檔,但是我無法說服自己模式是安全的。
從谷歌文檔,流應該看起來像這樣:
我的安全問題在於對request.env的工作原理不甚了解。
問題1 :用戶可以設置request.env值(例如,使用cURL請求之類的值)嗎?
問題2 :如果是這樣,是什么阻止了惡意用戶訪問應用程序的omniauth回調端點並設置了request.env的值,以便他們可以模擬其他用戶? 例如,在github上顯示的示例中,控制器中的回調端點為:
類Users :: OmniauthCallbacksController <Devise :: OmniauthCallbacksController
def google_oauth2
# You need to implement the method below in your model (eg app/models/user.rb) @user = User.from_omniauth(request.env["omniauth.auth"]) if @user.persisted? flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" sign_in_and_redirect @user, :event => :authentication else session["devise.google_data"] = request.env["omniauth.auth"].except(:extra) #Removing extra as it can overflow some session stores redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\\n") end
結束
結束
問題3 :我的Rails應用服務器(我正在使用puma)似乎未記錄圖表中第5步的請求(將代碼交換為令牌)。 從用戶的角度來看,我在Chrome中看不到該信息,因為用戶未參與該通信。 我如何查看/記錄/驗證正在通話?
問題1:用戶可以設置request.env值(例如,使用cURL請求之類的值)嗎?
是。 request.env
包含很多東西,例如傳入的標頭和參數。 但是用戶無法將request.env['omniauth.auth']
設置為由服務器端請求提供程序獲取的值填充的請求。
使用env
和request.env
傳遞值是一種將Rack中間件中的數據沿管道傳遞的相當標准的方法。 由於用戶輸入僅限於參數和標題,因此它不是一個巨大的安全漏洞。
問題2:如果是這樣,是什么阻止了惡意用戶訪問應用程序的omniauth回調終結點並設置request.env的值,以便他們可以模擬其他用戶?
用戶唯一接受的輸入是訪問令牌,ID令牌和一個時間碼。 獲得這些將需要蠻力攻擊(在提供者上)或中間人。
問題3:我的Rails應用服務器(我正在使用puma)似乎沒有記錄圖中第5步的請求(將代碼交換為令牌)。 從用戶的角度來看,我在Chrome中看不到該信息,因為用戶未參與該通信。 我如何查看/記錄/驗證正在通話?
由於正在從Rails服務器向提供程序進行調用,因此日志中沒有任何內容。 您可以使用httplog之類的工具進行調試,但實際上您應該進行涵蓋Omniauth策略這些方面的測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.