我已將Firebase身份驗證完全集成到了我的Android應用程序中,現在我希望客戶端使用唯一的令牌與我的後端(導軌)進行交互。我的問題是它是如何做:如何使用Rails進行Firebase身份驗證?
- 用戶的登錄,例如使用Facebook的身份驗證,
- 發送火力地堡令牌到後端,並用獨特的令牌用於驗證
- 響應客戶端即將到來的API請求(獲取用戶數據,保存用戶數據...)
謝謝
我已將Firebase身份驗證完全集成到了我的Android應用程序中,現在我希望客戶端使用唯一的令牌與我的後端(導軌)進行交互。我的問題是它是如何做:如何使用Rails進行Firebase身份驗證?
謝謝
你不需要步驟#3。 Firebase Auth Android SDK getToken() API會爲登錄用戶返回一個短期(一小時)的Firebase身份驗證令牌,如果前一次過期,則會自動返回一個新令牌。
Firebase token verification doc描述瞭如何在客戶端應用上獲取Firebase令牌並驗證服務器端的令牌。
以JinLiu的回答着,一旦你在你的Android代碼獲得令牌,將其發送到後端說:https://www.yourbackend.com?authenticate?token=asdad7687h ... 注意,由火力地堡生成的令牌是智威湯遜的道理,我們需要先驗證其真實性並在後端對其進行解碼。爲此,您需要將這兩個寶石添加到您的寶石文件 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/[email protected]"
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/[email protected]上提到的其中一個密鑰簽署。如果是,解碼令牌並獲取Firebase ID。
我開發了firebase_id_token寶石。
它處理所有的證書/簽名業務。
它可以簡單地爲:
FirebaseIdToken::Signature.verify(token)
上面提到的文檔沒有Rails的實現 –