Google контакт api v3 аутентификация - PullRequest
3 голосов
/ 21 декабря 2011

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

 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 в установленном приложении desctop без использования учетных данных других учетных записей.

1 Ответ

0 голосов
/ 14 марта 2012

Перед началом работы вы должны получить токен авторизации.Для этого вы должны создать ссылку, которую должен открыть пользователь, и большой доступ к вашему приложению.Чем вам нужно запросить токен с кодом, который вы получите позже.Этот механизм описан в 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 это код, который вы должны поймать после перенаправления пользователя со "страницы предоставления доступа" Но этот метод api 2, я думаю .... Может я ошибаюсь, кто знает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...