4

我想創建一個PHP網頁,需要從我的域中的Google電子表格(我正在使用Google Apps免費版)讀取一些數據。使用Google Spreadsheet API中的OAuth 2.0授權請求

要閱讀的電子表格是非公開的,但對我的域中的某些人可見。由於它是非公開的,我知道會有一些認證和授權的東西,即使我使用API​​來讀取它。

我找到了這個網頁,但有件事我不明白: http://code.google.com/intl/zh-TW/apis/spreadsheets/data/3.0/developers_guide.html#Auth

它說,我們應該使用OAuth 2.0協議,這是確定的。但它也表示在授權過程中,「Google向用戶顯示OAuth對話框,要求他們授權您的應用程序請求其某些數據。」

我的網頁將顯示一些從電子表格中讀取的數據。因此,每當有人前往我的網頁時,它會向電子表格所有者顯示一個對話框,要求獲得許可?這是什麼意思?

任何建議將非常受歡迎。

回答

4

你其實想什麼完成您的服務器和Google之間的Server to Server身份驗證。

這樣,當訪問者進入你的頁面時,你將從你自己的電子表格中獲取數據,而不需要任何第三方參與。

I'ts可能你會發現你在找什麼在Google Service Accounthere

此外, 另一種解決方案(這是很容易做到的,但可能有一些挫折)是使用oauth 2.0協議與您的Google開發者帳戶(從Google Console API檢索)。

  1. 如果您尚未創建一個谷歌帳戶開發(谷歌控制檯API)
  2. 生成與「離線」授予您的應用程序訪問/刷新令牌 - 這意味着你可以使API請求與你的開發即使您沒有使用電子表格帳戶登錄,也需要將帳戶記入您的電子表格帳戶。
  3. 保存您生成的刷新令牌並使用它重複生成訪問令牌(訪問令牌持續1小時)。

刷新令牌不應該過期,但萬一它可以,你可以再次生成它並替換一個新的令牌,並保持與它產生訪問令牌。

如果您的刷新令牌失效,您必須手動將其替換,因爲這需要您重新授予對您的開發者帳戶的訪問權限才能訪問您的電子表格帳戶。

我希望這會有所幫助。

MENY

2

是的,OAuth協議意味着當您嘗試向其他方(谷歌)詢問受保護的資源時,您的網站應該將用戶重定向到其他方網站,向他顯示Google的登錄名/密碼對話框,並請求確認用戶同意允許您的網站從其他網站使用用戶的資源(在您的案例中爲谷歌)。 即OAuth是如何工作的

和谷歌需要你的用戶的憑據,因爲谷歌是不知道,用戶也正是這個用戶(如果他沒有例如任何cookie)

+0

我有點困惑。訪問我的網頁的人只是客人,他們在我的Google App域中沒有Google帳戶。我希望我的網頁可以公開瀏覽,但它需要的數據來自我的Google App域中的私人Google電子表格文檔。 – bobo

+0

OAuth是否僅適用於從其他人的域中讀取數據?我從我自己的域中讀取數據,我控制的是OAuth在我的情況下仍然有用嗎? – bobo

+0

我不確定,也許你會需要一些巨大的oauth定製在你的情況下..所以它會透明地(對於用戶)使所有的請求重定向,然後顯示你的數據。但是,實際上它應該是幫助你在你的網站上顯示來自谷歌(臉譜,不管)用戶帳戶的數據的協議。對於你的任務,也許你需要選擇另一個解決方案 – javagirl

4

谷歌&的OAuth教程: 我搜索了天找到了這個。這比我使用的其他OAuth風格教程 好得多。它用於連接到Google文檔/谷歌驅動器。

Python的例子是在這裏,也看到了Java的等其他的例子: https://developers.google.com/drive/examples/python

注意你需要刷新令牌添加到它。但是,正如你所期望的那樣。

還連接到電子表格中使用:

  SpreadsheetService service = 
        new SpreadsheetService("MySpreadsheetIntegration-v1"); 

      service.setHeader("Authorization", "Bearer " + accessToken); 
2

您可以使用新提供的OAuth2流程

//flow use httpTransport, clientSecrets, json factory and datastore factory 
val flow = new GoogleAuthorizationCodeFlow 
    .Builder(httpTransport,JSON_FACTORY,clientSecrets,SCOPES) 
    .setDataStoreFactory(datastoreFactory) 
    .build() 

// authorize 
val credential=new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user") 

,並與您的GDATA服務使用它:

val service:SpreadsheetService=new SpreadsheetService("SpreadsheetIntegration") 
service.setOAuth2Credentials(credential) 

全例子在斯卡拉:https://github.com/spaced/spreadsheet-oauth2-example