2013-04-30 78 views
0

在過去的幾個月中,我已經熟悉谷歌應用程序腳本中的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的答案在下面,就是這樣。我有沒有辦法以編程方式阻止這個非常手動的過程?

+0

我們能幫忙嗎?聽起來你知道錯誤信息的含義,即令牌有問題。聽起來像一個調試任務。 – eddyparkinson 2013-04-30 06:49:39

回答

1

作爲所有者執行的腳本將通過appscript內置身份驗證自動保存所有者令牌。 但是,如果您自己正在執行oauth流程,它將保存用戶的令牌,從而無法訪問您的數據。

+0

我在上面添加了更新,有沒有辦法解決這個問題? – 2013-05-01 00:55:17

+1

它不清楚你想用保存的令牌訪問什麼。如果其「所有者」數據在將應用程序提供給用戶之前保存刷新令牌。如果它的用戶數據,然後每個用戶需要做認證流程,你需要爲每個用戶保存一個令牌。聽起來你應該使用appengine。 – 2013-05-02 02:09:21