Запросы Python - Аутентификация API Azure Graph

Я пытаюсь получить доступ к API Graph Azure AD с помощью библиотеки запросов Python. Мои шаги - сначала получить код авторизации. Затем, используя код авторизации, я запрашиваю токен доступа / токен обновления и, наконец, запрашиваю API.

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

Мой сценарий возвращает код ответа 200, но заголовки ответа не включают это поле. Я ожидал, что новый URL-адрес с кодом будет в заголовках ответов. Я также ожидал, что ответ будет с кодом 301.

Кто-нибудь знает, почему у моих заголовков ответов нет кода авторизации? Кроме того, учитывая код аутентификации, как мне вытащить его, чтобы затем получить токены доступа / обновления с помощью Python?

Мой код ниже:

import requests

s = requests.Session()
s.auth = (USERNAME, PASSWORD)

# Authorize URL
authorize_url = 'https://login.microsoftonline.com/%s/oauth2/authorize' % TENANT_ID
# Token endpoint.
token_url = 'https://login.microsoftonline.com/%s/oauth2/token' % TENANT_ID

payload = { 'response_type': 'code',
            'client_id': CLIENT_ID,
            'redirect_uri': REDIRECT_URI
          }

request = s.get(authorize_url, json=payload, allow_redirects=True)
print request.headers

person eltaco431    schedule 30.11.2015    source источник


Ответы (2)


В этом сообщении блога показано, как правильно аутентифицироваться в Azure REST API с помощью Python: http://blogs.msdn.com/b/shwetasblogs/archive/2015/10/21/authentication-with-azure-ad-for-azure-resource-manager-the-multitenant-app-подход.aspx. Документация MSDN, не относящаяся к Python, находится здесь: https://msdn.microsoft.com/en-us/library/azure/dn790557.aspx.

person theadriangreen    schedule 01.12.2015

Похоже, вы реализуете поток предоставления кода авторизации через python Запросы. Как показывает поток, ответ на запрос authorize_url будет перенаправлен на страницу SSO вашего клиента AD. После входа пользователя в систему он будет перенаправлен в папку, указанную в redirect_uri с code в качестве параметров URL. НАПРИМЕР. http://localhost/?code=AAABAAAAiL...
И ваш код, похоже, не может просто отображать html-страницу с разрешенным JavaScript, поэтому он не будет перенаправлять на страницу входа в систему.

Так что вы можете обратиться к предложению @ theadriangreen по реализации с помощью приложения веб-сервера на Python.

В противном случае вы можете обратиться к Библиотека аутентификации Microsoft Azure Active Directory (ADAL) для Python, которая представляет собой пакет Python для получения токена доступа из AD и может быть легко интегрирован в ваше приложение Python.

person Gary Liu    schedule 01.12.2015