2011-12-21 7 views
3

Я пытаюсь использовать новый API контактов google. Моя задача проста - получить контакты из статической (моей личной) учетной записи домена. зарегистрировать мое приложение на консоли API и получить ClientId, ClientSecret Так я пытаюсь проверить подлинность моего приложения через .net (Google SDK)Проверка подлинности Google api v3

RequestSettings settings = new RequestSettings(appName,login,password); 
ContactsRequest cr = new ContactsRequest(settings); 
Feed<Contact> contacts = cr.GetContacts(); 
foreach (Contact entry in contacts.Entries) 
{ 
     .... 
} 

Этот код работает хорошо, но Google говорит, что мы должны использовать аутентификацию OAuth2 при производстве сценарий. Я пробую разные параметры на RequestSettings, но в другом варианте я получаю 401 (доступ запрещен). Итак, мой вопрос: какой правильный путь для авторизации через google API v3 в установленном десктоп-приложении без использования учетных данных других учетных записей.

+0

... Google сказал, что мы должны использовать OAuth2 , который пишет, что вы должны запросить у вас после этой строки. Параметры настроек запроса = новые RequestSettings (appName); // Добавить токен авторизации здесь ContactsRequest cr = new ContactsRequest (настройки); , но они ничего не понимают, как это сделать. . Я привязался, чтобы найти решение в любом случае для использования OAuth 2.0 вы можете прочитать здесь https://developers.google.com/accounts/docs/OAuth2Login –

ответ

0

Прежде чем приступить к работе, вы должны получить токен аутентификации. Для этого вы должны создать ссылку, которую пользователь должен открыть и получить доступ к вашему приложению. Чем вы должны запросить токен с кодом, который вы получите позже. Этот механизм описан в https://developers.google.com/accounts/docs/OAuth2Login что-то вроде этого:

 private const string GetTokenUrl = "https://accounts.google.com/o/oauth2/token";  
     private new bool Auth(bool needUserCredentionals = true) 
     { 
      var dic = new Dictionary<string, string>(); 
      dic.Add("grant_type", "authorization_code"); 
      dic.Add("code", ResponseCode); 
      dic.Add("client_id", ApplicationId); 
      dic.Add("client_secret", ApplicationSecret); 
      dic.Add("redirect_uri", HttpUtility.UrlEncode(AppRedirectUrl)); 
      var str = String.Join("&", dic.Select(item => item.Key + "=" + item.Value).ToArray()); 
      var client = new WebClient(); 
      client.Headers.Add("Content-type", "application/x-www-form-urlencoded"); 
      string s; 
      try { s = client.UploadString(GetTokenUrl, str); } 
      catch (WebException) { return false; } 
      catch (Exception) { return false; } 
      AuthResponse response; 
      try { response = JsonConvert.DeserializeObject<AuthResponse>(s); } 
      catch (Exception) { return false; } 
      Token = response.access_token; 
      SessionTime = DateTime.Now.Ticks + response.expires_in; 
      if (needUserCredentionals) 
       if (!GetUserInfo()) return false; 
      return true; 
     } 

     public class AuthResponse 
     { 
      public string access_token { get; set; } 
      public string token_type { get; set; } 
      public long expires_in { get; set; } 
     } 

ResponseCode это код, что вы должны поймать после того, как пользователь перенаправлять от «Предоставление доступа к странице» Но этот метод апи 2 я думаю ... Может быть, я m wrong, кто знает

+0

sorry AuthResponse - это открытый класс AuthResponse { public string access_token {get; задавать; } public string token_type {get; задавать; } public string expires_in {get; задавать; } } –

+0

и JsonConvert.DeserializeObject это часть Newtonsoft.Json dll, вы можете получить его из кода plex –

+0

что такое 'GetTokenUrl' и' _gApi.Token'? – Alexei

Смежные вопросы