2016-01-25 3 views
0

Что мне нужно сделать, так это проверить подлинность себя в API GoolgeDrive (я использую его на python) для доступа к моему диску для выполнения какой-либо задачи автоматизации.Аутентификация API GoogleDrive REST без вмешательства

Я хотел бы, чтобы мой сценарий работал один каждый час без какого-либо вмешательства. Так что мне нужен способ создания объекта учетных данных с моим логином и паролем.

Возможно ли без перенаправления и так далее?

+0

Попробуйте задать более правильный вопрос, если вы хотите, чтобы ваш вопрос ответил. Взгляните на эту [How-to-ask] (http://stackoverflow.com/help/how-to-ask) документацию. – Andres

ответ

1

Я думаю, что это невозможно с идентификатором пользователя и паролем. То, как Google Диск реализует это, использует токен обновления. Это означает, что вы аутентифицируете свое приложение один раз в интерактивном режиме. Это позволяет вам приложение на один час. Если механизм токена обновления настроен правильно, приложение будет обновлять токен каждый раз, когда он понадобится.

В основном следующие шаги должны быть приняты

  • Визит console.developers.google.com
  • Зарегистрируйте проект и получить OAuth идентификаторы клиента
  • Выберите в качестве типа веб-сервера и введите «http://localhost:8080/» в качестве разрешенного URL-адреса перенаправления
  • Загрузите файл client_secrets.json и сохраните его в корне вашего приложения python
  • Создайте файл под названием «установка ings.yaml»в том же месте со следующим содержанием

    client_config_backend: settings
    client_config:
    client_id: YOUR_CLIENT_ID_GOES_HERE
    client_secret: YOUR_CLIENT_SECRET_GOES_HERE

    save_credentials: True
    save_credentials_backend: file
    save_credentials_file: credentials.son

    get_refresh_token: True

    oauth_scope:
    - https://www.googleapis.com/auth/drive.file
    - https://www.googleapis.com/auth/drive.install

  • В коде питона вам нужно сделать надлежащую идентификацию и мандате экономии:

    gauth = GoogleAuth() 
    gauth.settings["get_refresh_token"]=True 
    gauth.settings["approval_prompt"]="force" 
    if exists(self.credsFile): 
        gauth.LoadCredentialsFile(self.credsFile) 
    if gauth.credentials is None: 
        # Authenticate if they're not there 
        gauth.LocalWebserverAuth() 
        gauth.SaveCredentialsFile(self.credsFile) 
    elif gauth.access_token_expired: 
        # Refresh them if expired 
        gauth.Refresh() 
        gauth.Authorize() 
    else: 
        # Initialize the saved creds 
        gauth.Authorize() 
        # Save the current credentials to a file 
        gauth.SaveCredentialsFile(self.credsFile) 
    self.driveInstance= GoogleDrive(gauth) 
    
  • Убедитесь, что вы передаете в self.credsFile в качестве действительного имени файла

  • Выполнение этого кода должно содержать URL-адрес консоли. Скопируйте его в браузер, подтвердите подлинность и дайте свое согласие. Google должен запросить у вас два соглашения, второе - для аутентификации на Google Диске, что фактически выполняется токеном обновления.

  • URL-адрес перенаправления из начальной конфигурации учетных данных в консоли разработчика вызывается после получения согласия. Он вызывает временный веб-сервер, запущенный вашим приложением. Так происходит обратный вызов.(Это означает, что вы должны запустить браузер и приложение на той же машине, на этом этапе - вы можете скопировать все три файла на сервер)

Теперь ваше приложение должно работать вечно, не требуя вмешательства пользователя.

+0

Это идеальное решение. Я не тестировал его, и я не буду, потому что к настоящему моменту мой проект занял другое направление, и я даже не помню, зачем мне это нужно. Nevermind выглядит неплохо и, вероятно, поможет кому-то. – Controlix

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