Код авторизации OAuth2 - API остальных Outlook - PullRequest
0 голосов
/ 08 октября 2018

Я хотел бы загрузить электронные письма и их вложения из моей учетной записи Outlook через Python.Поэтому я использовал официальный скрипт Python с некоторыми изменениями, так как я не хотел использовать Django.Здесь ниже вы можете увидеть мои две неудачные попытки, две соответствующие ошибки и некоторые комментарии.Если я не ошибаюсь, проблема возникает, когда я пытаюсь получить код авторизации для получения токена доступа.На этом этапе я не могу сделать так, чтобы мое приложение входило успешно и автоматически.Хотя в этом посте я только представляю проблему с кодом авторизации, я хотел бы сообщить вам, что вторая проблема связана с неверным токеном доступа, который я получаю, используя мой client_id, client_secret и полученный вручную код авторизации.

Обратите внимание, что я использую так называемую «конечную точку аутентификации Azure AD v2» (как предложено в https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/use-outlook-rest-api и https://docs.microsoft.com/en-us/outlook/rest/python-tutorial) для регистрации и аутентификации моего приложения.Стоит подчеркнуть, что я также пытался использовать Azure AD и OAuth (т.е. второй подход для обработки регистрации приложений и авторизации пользователей 'https://manage.windowsazure.com/') без какого-либо успеха. Каков правильный подход в моем случае? Где моя ошибка? Учитывая мои проблемы, я считаю, что регистрирую свое приложение неправильно.

Заранее благодарю, желаю всем хорошего дня.

Модифицированный скрипт :

# Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE.txt in the project root for license information.
#from urllib.parse import quote, urlencode
from urlparse import urlparse
from urllib2 import urlopen
from urllib import urlencode
import requests
import base64
import json
import time
import httplib

# Client ID and secret
client_id = 'xxxxxxxxxx' 
client_secret = 'xxxxxxxxxx'

# Constant strings for OAuth2 flow
# The OAuth authority
authority = 'https://login.microsoftonline.com'

# The authorize URL that initiates the OAuth2 client credential flow for admin consent
authorize_url = '{0}{1}'.format(authority, '/common/oauth2/v2.0/authorize?{0}')

# The token issuing endpoint
token_url = '{0}{1}'.format(authority, '/common/oauth2/v2.0/token')

# The scopes required by the app
scopes = [ 'openid',
           'User.Read',
           'Mail.Read',
           'offline_access']

def get_signin_url(redirect_uri):
  # Build the query parameters for the signin url
  params = { 'client_id': client_id,
             'redirect_uri': redirect_uri,
         'response_mode': 'query',
             'response_type': 'code',
             'scope': ' '.join(str(i) for i in scopes)
           }

  signin_url = authorize_url.format(urlencode(params))

  return signin_url

signin_url = get_signin_url("http://localhost/myapp/")

## first attempt
signin_url_r = signin_url.replace('https://', "")
conn = httplib.HTTPConnection(signin_url_r)
#conn.request("GET", "code")
#conn.request("GET","/")
#r1 = conn.getresponse()
#print(r1.read())
#print(r1.status, r1.reason)

## second attempt
resq = requests.get(signin_url)
print resq.status_code
print resq.text
print resq.url

#with open('authhelper_f_v0.html', 'w') as outfile:
#   outfile.write(resq.text)

Ошибки :

(1)

ERROR ---> conn.request("GET", "code")
gaierror: [Errno -2] Name or service not known 

(2)

<!DOCTYPE html>
<html dir="ltr" class="" lang="en">
<head>
    <title>Sign in to your account</title>
etc..

Комментарии :

Первая попытка выдает ошибку (1), которая, по моему мнению, происходит из-за отсутствия слова «code» в ответе get. Если я печатаю «resq.text» со второй попытки, ядействительно может видеть, что ответ get не является ожидаемым (то есть GET HTTP / 1.1 302 Found Location: http://localhost/myapp/?code= xxxxx & session_state = xxxx & state = xxx - см. «Запрос на перенаправление после успешного входа» в https://docs.microsoft.com/en-us/outlook/rest/get-started), а не тот, который вы видите в (2), то есть страницу «Вход в Outlook».

1 Ответ

0 голосов
/ 09 октября 2018

У вас возникают проблемы с аутентификацией?

Если это так, вы можете проверить свой вопрос аутентификации, перейдя по ссылке ниже:

Авторизовать доступ к веб-приложениям Azure Active Directory с помощьюПоток предоставления кода OAuth 2.0 Просмотр различных потоков OAuth2, поддерживаемых в API AzureAD для Office 365

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...