我正在嘗試爲Android平臺的自定義node.js服務器api驗證移動應用程序。我希望爲此使用Google OAuth2令牌,而不是推出自己的身份驗證,因爲安裝了Google Play的Android設備可將其用於應用程序開發人員。我正在使用來自Google Play服務庫的GoogleAuthUtil.getToken
來電,記錄爲here。我試圖按照這個android developers blogpost在Node.js服務器中驗證Google授予OAuth令牌的正確方法是什麼?
概述的建議getToken
方法返回我的情況下長857字節的字符串。如果我嘗試這個令牌傳遞到谷歌的TokenInfo端點,它返回:
{ '錯誤': 'INVALID_TOKEN', 'ERROR_DESCRIPTION': '無效值'}
我在做什麼錯這裏?在getToken調用的'範圍'中,我發送: audience:server:client_id:**i_put_my_clientid_here**
。我爲「安裝的應用程序」生成了一個clientid。使用這個客戶端ID,對getToken的調用完全不起作用。當我爲「服務帳戶」生成一個客戶端ID時,調用成功,但是如上所述,當傳遞給TokenInfo端點時,我得到一個857字節的令牌失敗。
編輯: 我還爲「web應用程序」創建了一個客戶端ID,因爲它看起來是調用getToken
時要使用的正確客戶端ID。但行爲是一樣的,我得到一個857字節的令牌,在調用Google的端點時不會生效。
如何在Android上使用Google Play服務正確獲取有效的身份驗證令牌?一旦我有正確的標記,什麼是正確的node.js庫來驗證它的服務器端?我可以使用passport-google-oauth嗎?
我已經提取了三部分,需要驗證id_token。 SHA256(頭+「。」+有效載荷)是否等於解密的簽名?或者,解密後的簽名僅等於有效負載的哈希值?在數據獲取Base64編碼之前它是否相等?我的功能與谷歌證書令牌非常不起作用,所以我只是想知道。謝謝 – kingSlayer 2014-08-11 17:10:36
簽名是爲sha256(頭+「。」+有效載荷) – George 2014-08-12 19:30:33