Как получить токен авторизации через OAuth2 и читать электронную почту Outlook через http-запросы?Python

Программы на Python
Ответить
Anonymous
 Как получить токен авторизации через OAuth2 и читать электронную почту Outlook через http-запросы?

Сообщение Anonymous »

Я получаю свои электронные письма в Outlook, используя только запросы Python для ПОЛУЧЕНИЯ конечной точки https://outlook.office365.com/api/v1.0/me/messages

Пример кода:

import requests

requests.get('https://outlook.office365.com/api/v1.0/me/messages', auth=(email, pwd))


Я получал обратно объект json, анализировал его и получал содержимое своего электронного письма. Но теперь Microsoft объявила его устаревшим, и я пытаюсь перейти на использование Microsoft Graph. Мой вопрос: как мне получить токен OAuth2 без необходимости запуска браузера с помощью http-запросов?

До сих пор я читал документацию и зарегистрировал свой " app» (просто обычный скрипт Python) на портале регистрации приложений. В каждом примере, с которым я сталкиваюсь, мне всегда приходится посещать URL-адрес авторизации, где мне нужно вручную войти в систему через интерфейсный интерфейс, который выглядит следующим образом:
[img]https: //i.sstatic.net/sVnUR.png[/img]
Я хочу иметь возможность делать это через http-запросы/без пользовательского интерфейса, но не могу найти ответов о том, как это сделать.

Это код, который у меня есть:

outlook_test.py

import requests

authorize_url = 'https://login.microsoftonline.com/commo ... /authorize'
token_url = 'https://login.microsoftonline.com/commo ... v2.0/token'

payload = {
'client_id': app_client_id, # Variable exists but not exposed in this question
'response_type': 'code',
'redirect_uri': 'https://login.microsoftonline.com/commo ... tiveclient',
'response_mode': 'form_post',
'scope': 'mail.read',
'state': '12345'
}

r = requests.get(authorize_url, params=payload)
print(r.status_code)
print(r.text)


Вот что я получаю в ответ:

200



Sign in to your account

















...


Вот что у меня есть в настройках платформы, когда я зарегистрировал свое приложение, если это помогает:
Изображение


Можно ли как-нибудь получить код авторизации программным способом? Я также попробовал передать параметр auth, но это не сработало.

Новые результаты

Я недавно обнаружил, что запросы Python обрабатывают OAuth2, но теперь я получаю другую ошибку при попытке следовать их примерам.
Это ошибка, которую я получаю:

File "outlook_test.py", line 31, in
token = oauth.fetch_token(token_url=token_url, auth=auth)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\requests_oauthlib\oauth2_session.py", line 307, in fetch_token
self._client.parse_request_body_response(r.text, scope=self.scope)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\clients\base.py", line 415, in parse_request_body_response
self.token = parse_token_response(body, scope=scope)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\parameters.py", line 425, in parse_token_response
validate_token_parameters(params)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\parameters.py", line 432, in validate_token_parameters
raise_from_error(params.get('error'), params)
File "C:\Users\ryee\Documents\gitLabQA\QA_BDD\outlook_env\lib\site-packages\oauthlib\oauth2\rfc6749\errors.py", line 405, in raise_from_error
raise cls(**kwargs)
oauthlib.oauth2.rfc6749.errors.InvalidClientIdError: (invalid_request) AADSTS90014: The required field 'scope' is missing.
Trace ID: 2359d8a6-0140-43c1-8ff5-8103045d2f00
Correlation ID: dff39a1f-ffe1-493e-aea3-1536974b777d


Я попробовал «[Mail.Read]» в качестве области, но получаю «Неверный параметр области».

Мой новый скрипт Python:

outlook_test.py

from oauthlib.oauth2 import BackendApplicationClient
from requests.auth import HTTPBasicAuth
from requests_oauthlib import OAuth2Session
auth = HTTPBasicAuth(client_app_id, app_secret)
client = BackendApplicationClient(client_id=client_app_id)
oauth = OAuth2Session(client=client)
token = oauth.fetch_token(token_url=token_url, auth=auth)


Подробнее здесь: https://stackoverflow.com/questions/542 ... through-ht
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»