1

Тема: Проблеми з oauth2

Привіт всім! Виникла необхідність програмно відправляти файл з компютера до google drive. Для цього необхідно пройти аутентификацию. Чучуть полазивши по документації вирішив використовувати oauth2, але мій неокріпший інтелект відмовився опрацьовувати таку велику кількість нової інформації тому прошу допомоги в вас. Я пишу програму на c# тому якщо ви можете дати приклади на цій мові буде чудесно хоча це не сильно принципово, підійде люба популярна мова. Зараз я хочу зрозуміти саму суть цього методу.  На даний момент мій код робить таке.


static class mOauth2
    {
        private static string clientId = "дуже секретна інформація";
        private static string clientSecret = "це також секрет";
        private static string domain = "localhost";

        private static string applicationName = "ScreenShotHook";
        private static string redirectUri = "urn:ietf:wg:oauth:2.0:oob";

        private static string scopes = "https://www.googleapis.com/auth/drive";

        public static OAuth2Parameters GetToken()
        {
            OAuth2Parameters parameters = new OAuth2Parameters()
            {
                ClientId = clientId,
                ClientSecret = clientSecret,
                RedirectUri = redirectUri,
                Scope = scopes
            };

            string url = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
            Process.Start("iexplore.exe", url);
            forAccessPassword pwd = new forAccessPassword();
            pwd.ShowDialog();
            parameters.AccessCode = forAccessPassword.pwd;

            return parameters;

        }

і цей код використовується так

p = mOauth2.GetToken();
OAuthUtil.GetAccessToken(p);

Ну тобто я получив якийсь аксес токен, все чудово і прекрасно але що далі.
Наскільки зрозумів мій неокріпший мозок для передачі файлу до гугл драйву мені потрібно створити обєкт типу

DriveService(Google.Apis.Authentication.IAuthenticator _authenticator);

для цього мені потрібно мати _authenticator але я просто не розумію де його дістати. Якщо хтось знає як його дістати або просто може сказати як це все робиться по нормальному я б з радістю його вислухав.

2

Re: Проблеми з oauth2

Доводилось колись з аналітиксом працювати.
Там є велика кількість прикладів у Google.
http://code.google.com/p/google-api-dot … ingStarted а там .NET Client API Samples (.zip)
Там є приклади Tasks.SimpleOAuth2 та Tasks.ASP.NET.SimpleOAuth2.


В 1-му здається все зрозуміло, там описано метод:

private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
        {
            // Get the auth URL:
            IAuthorizationState state = new AuthorizationState(new[] { TasksService.Scopes.Tasks.GetStringValue() });
            state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
            Uri authUri = arg.RequestUserAuthorization(state);

            // Request authorization from the user (by opening a browser window):
            Process.Start(authUri.ToString());
            Console.Write("  Authorization Code: ");
            string authCode = Console.ReadLine();
            Console.WriteLine();

            // Retrieve the access token by using the authorization code:
            return arg.ProcessUserAuthorization(authCode, state);
        }

Використання:

  // Register the authenticator.
            var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description);
            FullClientCredentials credentials = PromptingClientCredentials.EnsureFullClientCredentials();
            provider.ClientIdentifier = credentials.ClientId;
            provider.ClientSecret = credentials.ClientSecret;
            var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);

            // Create the service.
            var service = new TasksService(auth);

У вашому випадку:

var service = new DriveService(auth);

Ось тут є гарна дока як це все працює: https://developers.google.com/accounts/docs/OAuth2

P.S. Переніс тему в .NET

3 Востаннє редагувалося truesupport (27.09.2012 18:58:40)

Re: Проблеми з oauth2

чесно хотів прикрутити другий код, але це виявилось не так просто. Спочатку прийшлось найти де написаний клас NativeApplicationClient, потім прийшлось шукати клас FullClientCredentials, потім виявилось що нехватає класу ComandLine, але в цей момент я запутався тотально в кількості референсів, неймспейсів і т д. розбиратись з тим не хотілось через те що знайшов для мене простіший спосіб, незнаю на скільки він кращий / гірший але він хочаб працював. Ось цей код

 private static ClientLoginAuthenticator LogIn(string user, string password)
        {
            try
            {
               var authenticator = new ClientLoginAuthenticator("ScreenShotHook", ServiceNames.Documents, user, password);
               return authenticator;
            }
            catch (AuthenticationException e)
            {
                Debug.WriteLine(e.Message);
            }
            return null;
        }

user - це електронна адерса наприклад така sdfdfl@gmail.com