8

我正在嘗試構建一個將與Google Drive集成並安裝到其中的網絡應用程序。用戶將能夠在其驅動器中創建和共享我的應用程序的文件。我正在嘗試使用Firebase編寫它,這樣我就可以利用那裏的許多優秀新功能。但是,我無法使auth在這兩個平臺上一致地工作。如何在Firebase中刷新Google AccessToken? #AskFirebase

這是客戶端唯一的應用程序(至少現在),所以我不能使用脫機身份驗證和刷新令牌。

在Firebase身份驗證之前,我會使用Google Identity Toolkit with gapi。這通常工作正常,雖然它使用不適合移動友好的彈出流。

gapi.signin2.render(elementId, { 
     longtitle: true, 
     width: 230, 
     height: 50, 
     theme: "dark" 
    }); 

    var auth2 = gapi.auth2.init({ 
     client_id: CLIENT_ID, 
     scope: SCOPES.join(" ") 
    }); 

    auth2.isSignedIn.listen(signinChanged); 
    auth2.currentUser.listen(userChanged); 

Gapi有點笨拙,但它的工作原理。所述訪問令牌可以通過調用

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse(true)); 

像往常一樣來獲得,所述接入令牌僅持續約一個小時,然後到期。 重要的事情是,我們可以只需撥打GoogleUser.reloadAuthResponse()獲取刷新的訪問令牌。請注意,這是刷新的訪問令牌,不是刷新令牌!

因此,從理論上講,我可以使用該訪問令牌與Firebase進行身份驗證,如described here,並且只能使用彈出流量或try to hack around that。谷歌表示,Identity Toolkit正在被Firebase身份驗證取代,新應用應該使用Firebase。

最新版本的Google Identity Toolkit已發佈爲 Firebase身份驗證。它包括升級的客戶端SDK,開放源代碼 UI庫,會話管理和集成電子郵件發送服務 用於忘記密碼流。

新項目應使用Firebase身份驗證。要將Identity Toolkit的現有項目遷移到Firebase身份驗證,請參閱 遷移指南。

Quoted from: Google

火力地堡擁有與谷歌身份驗證一個簡單的API。驗證後,我可以獲取並存儲AccessToken。因此,我認爲這是我應該實施auth的方式,即新的和改進的Firebase方式。此外,Firebase還提供了適用於移動設備的良好重定向流。

然而,有一個巨大的問題...

這將獲得訪問令牌。

firebase.auth().getRedirectResult().then(function(result) { 
     if (result.credential) { 
     // This gives you a Google Access Token. You can use it to access the Google API. 
     var token = result.credential.accessToken; 
     // ... 
     } 

     // The signed-in user info. 
     var user = result.user; 
    }) 

訪問令牌可用,我可以用它來讀取/寫入到驅動器,......一個小時。一旦該令牌過期,我無法再做任何事情。用戶仍然登錄到Firebase,因此我可以繼續使用Firebase服務,但我需要強制用戶再次登錄才能訪問該驅動器。這不會做!

我在尋找相當於Firebase中的GoogleUser.reloadAuthResponse()

  • 我該怎麼做?
  • 建立可訪問Firebase服務和G Suite的Web應用程序的推薦方式是什麼?
  • 有沒有官方的例子?
+0

您可能需要查看此[論壇](https://groups.google.com/forum/#!msg/firebase-talk/wAcJFfQlFeg/IUuJXNcgDHgJ),它是一個有點舊,但它討論瞭如何獲取刷新令牌的一些步驟。還有一個相關的[論壇](https://groups.google.com/forum/#!topic/firebase-talk/ZPW3xtwn8g0)講述了您遇到的問題。我不確定是否有任何更新,但我認爲您可以在上述論壇中應用該解決方法。希望這可以幫助。 –

+0

感謝您的回覆和鏈接。這些有點過時了,特別是我認爲在Google收購Firebase之前的第一個。我沒有看到一個可行的解決方法,除了一個模糊的評論,不使用他們的谷歌身份驗證,並自己從頭開始在服務器上使用刷新令牌來實現它。 :( 我不明白爲什麼谷歌會公開推薦使用Firebase的Google Auth,而不是Identity Toolkit,如果它不支持在一個小時之內對Google API進行擴展身份驗證,我希望Google的某些人會回覆並提供一些明確的指導 – Gary

回答

4

您已經在使用gapi獲取訪問令牌並每小時刷新一次,以便與Google Drive API進行整合。堅持。你需要做的是使用下面的API登錄到火力地堡與谷歌憑據:

var cred = firebase.auth.GoogleAuthProvider.credential(null, gapiAccessToken); firebase.auth().signInWithCredential(cred).then(function(user) { // You are signed in to Firebase now and do not need to re-sign in again. ... });

你現在到火力地堡簽署,而你的訪問令牌繼續通過GAPI被刷新。 Firebase會話無限期,因此您無需再次登錄Firebase。

+0

謝謝,我其實還沒有做,這是一個新的應用程序,我試圖以今天正確的方式做到這一點,我將谷歌的消息解讀爲:「使用Firebase身份驗證,而不是舊的Identity Toolkit 「所以這就是我想要做的,另外,我的應用程序需要一個_redirect flow_,而Identity Toolkit似乎沒有官方的方法來做到這一點,Firebase Auth將是完美的,只要我能弄清楚如何刷新訪問令牌_。 – Gary

+0

不幸的是,gapi不支持重定向流,Firebase不刷新訪問令牌。正如我所解釋的,您需要使用兩個API(gapi刷新訪問令牌和F irebase Auth signInWithCredential)。請通過https://groups.google.com/forum/#!forum/firebase-talk提交功能請求,以支持通過Firebase刷新OAuth令牌。 – bojeil

+0

您是否知道功能請求是否已提交,以便我可以跟蹤它?我搜索了,但找不到一個。謝謝! –

0

對於任何人只是想獲得身份驗證的端點的令牌進行調用使用火力谷歌標誌(即Google雲端點)後,您可以使用:

var successCallback = function(firebaseIdJsonWebToken) { 
    console.log("token: " + firebaseIdJsonWebToken); 
} 
var errorCallback = function(error) { 
    console.log("error: " + error); 
} 
firebase.auth().currentUser.getIdToken().then(successCallback, errorCallback) 

的火力ID令牌是智威湯遜,是不同於來自登錄重定向回調的憑證中的令牌。如果需要,getIdToken()函數將刷新令牌並將有效令牌返回給回調。來自登錄重定向回調的憑證中的令牌將在OP所說的1小時內過期,如果不嘗試再次登錄,則無法刷新該令牌。

如果您想使用firebase google登錄進行身份驗證的端點調用,請使用getIdToken()。然後按照使用Firebase身份驗證的Google雲端點說明進行操作

相關問題