我已經成功安裝並運行了Google Drive Quick Start application called DriveCommandLine。我也調整了一下,以獲取我雲端硬盤帳戶中某個文件的文件信息。Google Drive/OAuth - 無法弄清楚如何獲得可重複使用的GoogleCredentials
我現在想要做的是以某種方式保存證書並重新使用它們,而不必每次都訪問網頁以獲取授權碼。我已檢出this page,其中包含檢索和使用OAuth 2.0憑據的說明。爲了使用該實施例類(MyClass的),我已經修改在DriveCommandLine線,其中Credential對象被實例化:
Credential credential = MyClass.getCredentials(code, "");
這導致以下拋出異常:
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)
at com.google.api.client.json.jackson.JacksonFactory.createJsonParser(JacksonFactory.java:84)
at com.google.api.client.json.JsonFactory.fromInputStream(JsonFactory.java:247)
at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.load(GoogleClientSecrets.java:168)
at googledrive.MyClass.getFlow(MyClass.java:145)
at googledrive.MyClass.exchangeCode(MyClass.java:166)
at googledrive.MyClass.getCredentials(MyClass.java:239)
at googledrive.DriveCommandLine.<init>(DriveCommandLine.java:56)
at googledrive.DriveCommandLine.main(DriveCommandLine.java:115)
I」我們一直在研究這些API(Google Drive和OAuth)2天,並且取得的進展甚微。我非常感謝上述錯誤以及總體持久性憑證的問題。
這整個結構似乎對我來說是不必要的複雜。任何人都想解釋爲什麼我不能通過傳遞我的Google用戶名和密碼來創建一個簡單的Credential對象?
感謝, 布賴恩·卡羅爾Ø愛爾蘭都柏林
*更新*
好吧,我剛剛得到周圍上面的錯誤,我現在有一個新的。
我解決第一個問題的方法是修改MyClass.getFlow()。而不是創建從JSON文件GoogleClientServices的對象,我使用了一個不同版本的GoogleAuthorizationCodeFlow.Builder的,可以讓你直接進入客戶端ID和客戶端密鑰爲字符串:
flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, jsonFactory, "<MY CLIENT ID>", "<MY CLIENT SECRET>", SCOPES).setAccessType("offline").setApprovalPrompt("force").build();
我現在已經是問題我收到以下錯誤,當我嘗試使用流(GoogleAuthorizationCodeFlow對象)來交換授權代碼證書對象:
An error occurred: com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_scope"
}
googledrive.MyClass$CodeExchangeException
at googledrive.MyClass.exchangeCode(MyClass.java:185)
at googledrive.MyClass.getCredentials(MyClass.java:262)
at googledrive.DriveCommandLine.<init>(DriveCommandLine.java:56)
at googledrive.DriveCommandLine.main(DriveCommandLine.java:115)
有,我應該使用一些這方面的其他範圍是什麼?我目前正在使用MyClass提供的示波器陣列:
private static final List<String> SCOPES = Arrays.asList(
"https://www.googleapis.com/auth/drive.file",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile");
謝謝!
感謝pinoyyid,對不起,我不小心添加編輯/更新到您的文章,而不是我自己。我仍然習慣張貼在這裏!我會嘗試實施你的建議,並讓你知道這是怎麼回事。 PS - 不幸的是,我沒有2個月的時間來處理這個問題。我很生氣,我已經花了2天! : -/ –
關於frefreshtoken的返回。我已經創建了一個服務器應用程序,該應用程序在配置完成後無需任何用戶交互即可運行但是在幾天前(它已經運行了2個月沒有問題),可以看到服務器上已經打開了多個Auth頁面,請求訪問應用程序以使用Google Drive。即使它要求Auth,它仍然有效。任何線索爲什麼發生這種情況? –
應該可能是一個單獨的問題。我也看到了這一點,並把它放到谷歌隨機過期刷新令牌。在日誌中檢查400無效的授權,看看是否是原因。您的應用有可能從多個地方申請刷新令牌嗎?我相信如果是這樣的話,那些新的刷新令牌可能會過期舊的令牌。 – pinoyyid