簡體   English   中英

如何使用 Rails 進行 Firebase 身份驗證?

[英]How to Firebase Auth with Rails?

我已經在我的 Android 應用程序中完全集成了 Firebase 身份驗證,現在我希望客戶端使用唯一的令牌與我的后端(rails)進行交互。 我的問題是它是如何完成的:

  1. 用戶已登錄,例如使用 Facebook Auth,
  2. 將 Firebase 令牌發送到后端並進行驗證
  3. 為即將到來的 Api 請求(獲取用戶數據,保存用戶數據......)用唯一的 Token 響應客戶端

謝謝

我開發了firebase_id_token gem。
它處理所有證書/簽名業務。

它可以簡單地用作:

FirebaseIdToken::Signature.verify(token)

繼續 JinLiu 的回答,一旦你在你的 android 代碼中獲得了令牌,將它發送到你的后端說: https : //www.yourbackend.com ?authenticate?token=asdad7687h ...注意,Firebase 生成的令牌是 JWT token ,我們需要首先驗證其真實性並在后端對其進行解碼。 為此,您需要將這兩個 gem 添加到您的 gemfile gem 'jwt' , '1.5.6' gem 'rest-client' , '2.0.1' 完成后,您需要將這兩個(私有)函數添加到您的控制器:

def get_set_user
    begin
        token = params[:token]
        if token.nil?
          @user = nil
          return
        end
        firebase_id = verify_user(token)[0]["user_id"]
        if User.where(:firebase_id => firebase_id).exists?
          @user = User.where(:firebase_id => firebase_id).first
        else
          @user = User.new(:firebase_id => firebase_id)
          @user.save
          @user
        end
    rescue
        @user = nil
    end
end

def verify_user(token)
  certificate_url = "https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com"
  myresponse = RestClient.get(certificate_url).body
  certificates  = JSON.parse myresponse.gsub('=>', ':')
  myjson =""
  certificates.each do|key , value|
    begin
      x509 = OpenSSL::X509::Certificate.new(value)
      iss = 'https://securetoken.google.com/<yourdomain>'
      aud = 'yourdomain' # change this 
      myjson = JWT.decode(token, x509.public_key, true, 
      {               algorithm: "RS256", verify_iat: true ,
                      iss: iss , verify_iss: true ,
                      aud: aud , verify_aud: true
      })

      return myjson

    rescue
    end
  end

  return nil     

end

現在您可以像之前的操作一樣調用 get_set_user 來查看用戶是否具有有效令牌。 這個想法很簡單。 檢查令牌是否由https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com 中提到的密鑰之一簽名。 如果是,解碼令牌並獲取 firebase id。

您不需要第 3 步。 Firebase Auth Android SDK getToken() API 為登錄用戶返回一個短期(一小時)Firebase Auth ID 令牌,如果前一個令牌過期,則會自動返回一個新令牌。

Firebase 令牌驗證文檔描述了如何在客戶端應用程序上獲取 Firebase 令牌並在服務器端驗證令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM