2016-07-21 8 views
2

Я хочу создать скрипт python, который позволит мне загружать файлы в OneNote через командную строку. Я работаю отлично, и он отлично аутентифицируется. Тем не менее, каждый раз, когда он проходит аутентификацию, он должен открыть окно браузера. (Это связано с тем, что токены аутентификации продолжаются только один час с OneNote, и он должен использовать токен обновления, чтобы получить новый.) Хотя мне вообще не нужно взаимодействовать с окном браузера, тот факт, что ему нужно открыть один из них проблематичен, потому что программа должна работать исключительно в терминальной среде. (Например, код аутентификации OneNote пытается открыть браузер, но он не может, потому что браузер не открывается).Как проверить подлинность OneNote без открытия браузера?

Как я могу обойти эту проблему? Предположите, что изменить настройку среды невозможно.

UPDATE:

Вы должны получить код для того, чтобы генерировать маркер доступа. Это та часть, которая запускает браузер. Это требуется только в первый раз, хотя для этого начального токена. Впоследствии обновить запросы токенов не нужно. (Я называл это для обоих, и это было проблемой).

Это решает проблему открытия браузера при каждом запуске моей программы. Тем не менее, он все еще оставляет проблему браузера, чтобы открыть это начальное время. Я не могу этого сделать в терминальной среде. Есть ли способ обойти это?

E.g. Могу ли я сохранить код и позвонить ему позже, чтобы получить токен доступа (до тех пор, пока он не истечет)? Будет ли код работать для любого пользователя, или он будет работать только для меня?

ответ

0

Если это всегда с той же учетной записью - вы можете сделать «открытие браузера и ввод пароля» единовременным процессом настройки. После аутентификации у вас есть «токен доступа» и «токен обновления». Вы можете продолжать использовать токен доступа в течение ~ 1 часа. По истечении этого срока вы можете использовать «токен обновления», чтобы обменять его на «токен доступа» без какого-либо взаимодействия с пользователем. Вы всегда должны хранить токен обновления, чтобы позже получить новые токены доступа.

Вот как «фоновые» приложения, такие как «IFTTT», имеют доступ к вашей учетной записи в течение более длительного периода времени.

Ответ на ваш обновленный вопрос:

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

+0

Да, и я успешно получить и использовать как доступ и обновить маркер. Тем не менее, я обнаружил, что все токены обновления сохраняют пользователя от необходимости вручную щелкнуть их разрешение (которое они должны были сделать в первый раз), но он все равно открывает окно браузера примерно на полсекунды, а затем немедленно отключает это еще раз. Это не проблема для пользователя, которому вообще не нужно взаимодействовать с окном, но это проблема при запуске кода в среде, которая не может запустить окно браузера, поскольку это вызывает запрос ломать. – Elliptica

+0

Я не пробовал это с помощью python, но, конечно, используя скрипты CLI php, процесс извлечения токена acess с использованием долговременного «токена обновления» работает без проблем. @Jorge может исправить меня, но когда вы обновляете «токен доступа», выдается новый длинный «токен обновления», который может быть сохранен для дальнейших вызовов. – codeye

+0

@Elliptica: вызов для обмена токеном обновления для вызова REST и не требует взаимодействия с пользователем. Вы перенаправляете пользователя, что не соответствует моему первоначальному ответу. https://msdn.microsoft.com/en-us/library/office/dn659750.aspx –

0

Вам не нужен браузер, чтобы обновить маркер, который может быть сделано только простой запрос HTTP: https://msdn.microsoft.com/en-us/office/office365/howto/onenote-auth#get-new-access-token-msa

+0

Да, и у меня это реализовано, но всякий раз, когда я делаю этот запрос, он открывает окно браузера примерно на полсекунды и сразу же закрывает его. Если я попытаюсь сделать запрос в среде без браузера, он сломается. – Elliptica

+0

У вас есть пример запроса? Ток обновления не зависит от файлов cookie, вам просто нужно выполнить запрос POST, как описано в ссылке, с соответствующим полем авторизации (см. Раздел «Авторизация: переносчик {access-token]» на странице). – teki

+0

Запрос, на который я имею в виду, - это запрос внутренней авторизации, а не запрос токена обновления. В первый раз, когда вы отправляетесь на авторизацию приложения OneNote, он открывает окно браузера и требует, чтобы вы физически щелкнули «авторизовать», чтобы получить свой первоначальный токен доступа и обновления. Это та часть, которую я не могу понять, как делать на OS без окон. – Elliptica