在過去的幾個月中,我已經熟悉谷歌應用程序腳本中的OAuth2.0授權,但最近的異常讓我感到困惑。我有一個獨立的Web應用程序,作爲融合表的前端。 Web應用程序被設置爲'執行爲'腳本和融合表所有者,融合表授予對外部用戶的查看訪問權限。該程序檢測授權,如果需要提示,並使用刷新令牌(如果可用)。從擁有腳本和融合表的帳戶運行時,一切正常。當'執行應用程序爲我'時Google API授權。
一旦我發佈了網絡應用程序,我測試了它從外部帳戶,它工作正常。刷新標記然後從腳本所有者的UserProperties中移除。當應用程序從外部帳戶再次運行時,它會提示授權並正確授權(將新標記保存在腳本所有者的UserProperties中)。但是,對API的下一次POST調用收到403-Forbidden錯誤。此時,應用程序將繼續從任何帳戶(包括腳本所有者的帳戶)收到403-Forbidden錯誤,直到令牌被手動清除並作爲腳本所有者重新授權爲止。
爲什麼這些令牌無效?我希望,由於應用程序正在作爲腳本/融合所有者執行,所以以編程方式接收的任何令牌都將與腳本/融合所有者授權的令牌一樣有效。如果我的期望不正確,我怎樣才能防止多用戶的這種情況發生?
更新
我已經獲得了這方面的一些更多的牽引力,並已確定,我想在這裏分享一些相關的問題。首先,我手動刪除了令牌(刷新和訪問),以測試應用程序授權的能力。後續授權未返回刷新令牌(導致過度提示)。我發現這是來自google API的故意結果。除了requisite request parameters返回刷新令牌之外,我發現刷新令牌只在第一個用戶提示和授權(ref. here)上返回。爲了獲得另一個刷新令牌,您需要revoke-acess和重新授權或請求中的force the approval prompt。一旦我確定它變得更清楚,該標記被「附加」給發出初始授權請求的用戶。只要我保留由腳本/表所有者獲取的刷新令牌,那麼腳本可以由任何外部用戶使用(並且使用刷新令牌以編程方式重新授權)。這讓我回到了這一點。如果我失去刷新令牌,我需要手動刪除所有剩餘的令牌碎片,以腳本/表所有者的身份登錄,撤銷對應用的訪問權限,然後重新授權。
Per Zig的答案在下面,就是這樣。我有沒有辦法以編程方式阻止這個非常手動的過程?
我們能幫忙嗎?聽起來你知道錯誤信息的含義,即令牌有問題。聽起來像一個調試任務。 – eddyparkinson 2013-04-30 06:49:39