Примечание: на момент написания вы могли использовать только двухстороннюю аутентификацию с Google Apps для бизнеса / Eduction, это не будет работать в личных аккаунтах, так как нет способа получить пару ключ / секрет OAuth 1.0, вы будетенеобходимо использовать онлайн-аутентификацию хотя бы один раз (но вы можете использовать опцию вне браузера, чтобы вам не пришлось создавать выделенную страницу).
Ваш код верен, если вам не нужнопервые три строки, относящиеся к NativeApplicationClient
.Скорее всего, это сбой, потому что вы не правильно установили ключи OAuth, это вызывает 401 с.
Другая причина, которая вызывает 401 с, - использовать «matt@example.com» вместо «matt» в качестве имени пользователя,имя пользователя не включает ваш домен.
Чтобы настроить OAuth, следуйте инструкциям, приведенным в этой статье от Google.
Важнейшие части, на которые следует обратить внимание: «Разрешить доступ ко всемAPIs "должен быть не отмечен , и вы должны индивидуально предоставить доступ ко всем API.Если это не было сделано, вы получите ошибку 401 Invalid Credentials
.Затем вам также необходимо включить эти службы в консоли api .Если шаг консоли API не был выполнен, вы получите другую ошибку 403 Daily Limit Exceeded
.
Это вызовет проблемы, если вы ранее полагались на «Разрешить доступ ко всем API» для использования различных сервисов.вам придется предоставить их все по отдельности, насколько я понимаю, для использования API v3.Кажется, это было подтверждено google (4-й ответ Николя Гарнье) и предположительно является ошибкой, но это старый пост, так что похоже, что он здесь, чтобы остаться.
ДляПосле того, как это будет сделано, этот код будет работать, который по сути совпадает с вашим:
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 "Управление этим доменом"> "Расширенные инструменты "
Используя ключ управления" Управлять ключом домена OAuth ", генерируйте секрет, снимите флажок" Разрешить доступ ко всем API ".
Используя" Управление доступом клиента OAuth стороннего производителя ", включите API, которые выхотите получить доступ к использованию своего домена в качестве «имени клиента» и API, к которым вы хотите получить доступ, например, «http://www.google.com/calendar/feeds/" для календаря».
Затем, наконец, создайте проект в консоли API , используйтеAPIKey в качестве serviceKey в вышеприведенном примере и включите API, к которым вам нужен доступ.
Я отвечаю на этот вопрос, так как продолжал задавать этот вопрос, когда пытался выяснить, почему мой код постоянно возвращал 401.Надеюсь этокому-то помогает, так как инструкции Google ужасны и разбросаны повсюду.