簡體   English   中英

Google Calendar V3 2 Legged身份驗證失敗

[英]Google Calendar V3 2 Legged authentication fails

我正在嘗試創建訪問該公司的(商業)私人日歷的網頁,並在該時隙可用時插入事件。 我仍然面臨身份驗證問題。

API手冊指出我應該使用API​​密鑰和Oauth2LeggedAuthenticator,所以我完成了所有這些操作,並且觸發的請求相當不錯(它具有oauth令牌等),但是響應仍然是Invalid Credentials的異常; 容易說的是我的憑證是錯誤的,clientID,clientSecret和API Key仍然有效; 我懷疑2legged authenticater的最后2個參數,這是正確的嗎?

var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description);
provider.ClientIdentifier = ClientCredentials.ClientID;
provider.ClientSecret = ClientCredentials.ClientSecret;

var authenticator =
new OAuth2LeggedAuthenticator(ClientCredentials.ClientID, ClientCredentials.ClientSecret, "myworkusername", "workdomain.com");


Google.Apis.Calendar.v3.CalendarService service = new Google.Apis.Calendar.v3.CalendarService(authenticator);

service.Key = ClientCredentials.ApiKey;


var result = service.CalendarList.List().Fetch();

Assert.IsTrue(result.Items.Count > 0);

注意:在撰寫本文時,您只能在Google Apps for Business / Education中使用兩足式身份驗證,這不適用於個人帳戶,因為無法獲取OAuth 1.0密鑰/秘密對,您將不得不使用聯機身份驗證至少一次(但是您可以使用“瀏覽器外”選項,因此不必創建專用頁面)。

您的代碼是正確的,除了不需要與NativeApplicationClient有關的前三行。 這很可能失敗,因為您沒有正確設置OAuth密鑰,這會導致401s。

導致401s的另一件事是使用“ matt@example.com”而不是“ matt”作為用戶名,該用戶名不包含您的域。

要設置OAuth,請按照Google中本文的說明進行操作。

要注意的最重要部分是必須取消選中 “允許訪問所有API”,並且您必須單獨授予對所有API的訪問權限。 如果尚未執行此操作,則會收到401 Invalid Credentials錯誤。 然后,您還需要在api控制台中打開這些服務。 如果尚未完成api控制台步驟,則將收到另一個403 Daily Limit Exceeded錯誤。

如果您以前依靠“允許訪問所有API”來使用各種服務,那么這將給您帶來問題,就我所知,要使用v3 API,就必須單獨授予它們所有權限。 谷歌似乎已經證實了一點 (尼古拉斯·加尼耶(Nicolas Garnier)的第四次答復),並且應該是一個錯誤,但這是一個過時的帖子,因此看起來好像就在這里。

作為參考,此代碼將起作用,其本質上與您的代碼相同:

var auth = new OAuth2LeggedAuthenticator(domainName, consumerSecret, usernameWithoutDomain, domainName);  //domainName is presently used as the OAuth ConsumerKey for Google's 2legged OAuth

var service = new CalendarService(auth);

service.Key = serviceKey;

var results = service.CalendarList.List().Fetch();

Console.WriteLine(results.Items.Count);

因此,總而言之:

在Google Apps中,“管理此域”>“高級工具”

使用“管理OAuth域密鑰”啟用密鑰,生成密鑰,然后取消選中“允許訪問所有API”。

使用“管理第三方OAuth客戶端訪問權限”可以將您要訪問的API用作您的域(作為“客戶端名稱”)和要訪問的API,例如,“ http://www.google.com/calendar/feeds/”日歷。

然后,最后在API控制台中創建一個項目,在上述示例中將APIKey用作serviceKey並打開您需要訪問的API。

當我試圖找出為什么我的代碼不斷返回401時,我一直碰到這個問題,所以我正在回答這個問題。 希望此舉對您有所幫助,因為Google指令目前在各處都很糟糕且分散。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM