Как войти в Календарь Google без OAuth2? - PullRequest
0 голосов
/ 21 января 2019

РЕЗЮМЕ

У меня есть приложение Vb.net (форма Windows), и мне нужно управлять календарем Google для любого пользователя программного обеспечения. Я думал о том, чтобы иметь доступ пользователя непосредственно из программы, а не аутентифицировать себя для каждой операции в календаре Я пробовал метод OAuth2, но он не очень удобен для пользователя. Я должен войти прямо из приложения и без файлов JSON.

ЧТО Я ПОПЫТАЛ

Я занимаюсь разработкой программного обеспечения со встроенным Календарем Google. Я не эксперт по API Google, поэтому, выполнив поиск в Интернете, мне удалось пройти проверку подлинности с помощью файла credentials.json, который напрямую создает Google. На данный момент программа работает так: нажимаю кнопку «Войти»; автоматически открывает страницу входа в Google в браузере; Я ввожу электронную почту и пароль на официальной странице входа в Google; Я получаю доступ; Я вручную закрываю страницу браузера; Я возвращаюсь к программе, где msgbox предупреждает меня об успешной аутентификации.

Public scopes As IList(Of String) = New List(Of String)()
Public service As CalendarService

Function LoginGoogle()

    scopes.Add(CalendarService.Scope.Calendar)

    Dim credential As UserCredential

    If Directory.Exists("C:\credentials") Then

        Try

            Directory.Delete("c:\credentials", True)

        Catch

            MsgBox("Error! Can't delete folder 'credentials'")

        End Try

        Using stream As New FileStream("credentials.json", FileMode.Open, FileAccess.Read) 
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets, scopes, "user", CancellationToken.None,
                        New FileDataStore("c:\credentials")).Result
        End Using

        Dim initializer As New BaseClientService.Initializer()
        initializer.HttpClientInitializer = credential
        initializer.ApplicationName = "Carpedia"   ' app's name
        service = New CalendarService(initializer)
        Return 0

    Else

        Using stream As New FileStream("credentials.json", FileMode.Open, FileAccess.Read) 
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets, scopes, "user", CancellationToken.None,
                        New FileDataStore("c:\credentials")).Result
        End Using

        Dim initializer As New BaseClientService.Initializer()
        initializer.HttpClientInitializer = credential
        initializer.ApplicationName = "Carpedia"   ' app's name
        service = New CalendarService(initializer)
        Return 0

    End If


End Function

Что бы мне понравилось

Я хотел бы создать форму для ввода адреса электронной почты и пароля; нажмите на кнопку входа в систему; входить автоматически без использования браузера.

Пример: https://youtu.be/FW9_gCD8vVg?t=15 (минута 0:18)

Как я могу это сделать? Заранее спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Вход в систему с именем пользователя и паролем, хотя ваше приложение называется клиентским логином. Это было закрыто Google в 2015 году.

Для доступа к пользовательским данным у вас должно быть разрешение пользователя. Единственный способ получить разрешение пользователя - использовать OAuth2. Для вас нет другого выбора. Как вы можете видеть, в документации API календаря Google упоминается только oauth2 для доступа к личным данным пользователя.

Вы, похоже, уже используете клиентскую библиотеку .net API Google, которая является лучшим из известных мне способов аутентификации пользователя в приложении Windows.

...