Области, отличные от тех, которые я запрашивал при использовании request_oauthlib в Microsoft Graph. - PullRequest
0 голосов
/ 07 октября 2019

Я создаю сценарий Python для использования служб Microsoft Graph API с использованием библиотекиques_oauthlib. Я могу успешно создать сеанс OAuth2.0, получить URL-адрес авторизации для открытия в окне интернет-браузера для аутентификации, а затем я перенаправлен на URL-адрес перенаправления, который я ранее указал при регистрации приложения на портале Azure (https://portal.azure.com). Затем я копирую полный URL-адрес перенаправления для вставки в свое приложение. В этот момент мое приложение считывает вставленный мной URL-адрес, обменивается кодом проверки подлинности, встроенным в URL-адрес, для маркера проверки подлинности OAuth, который является абсолютно действительнымЧтобы убедиться, я отмечаю его в https://jwt.ms,, и он идеально подходит, за исключением предоставленных областей. Эти области не соответствуют областям, которые я запросил в моем сеансе OAuth.

SCRIPTКОД

# details from the library can be found at https://pypi.org/project/requests-oauthlib/
from requests_oauthlib import OAuth2Session 

client_id = <the client id from the Azure Portal when I registered my app>
client_secret = <the client secret I got from the Azure Portal>
redirect_uri = <the redirect_uri that I specified in the Azure Portal>
authorization_base_url = 'https://login.microsoftonline.com/<my tenant code>/oauth2/v2.0/authorize'
token_url = 'https://login.microsoftonline.com/<my tenant code>/oauth2/v2.0/token'
scopes = ["https://graph.microsoft.com/User.Read", "https://graph.microsoft.com/offline_access"]

# OAuth2.0 Authentication
msgraph = OAuth2Session(client_id, scope = scopes, redirect_uri=redirect_uri) # creates a OAuth 2.0 session object

# Redirect user to microsoft for authorization
# offline for refresh token
# force to always make user click authorize
authorization_url, state = msgraph.authorization_url(authorization_base_url, access_type="offline", prompt="select_account")

print('Please go here and authorize,', authorization_url) # user needs to click on this URL, authenticate and copy the URL that will be given

# Get the authorization verifier code from the callback url
redirect_response = input('Paste the full redirect URL here: ') # the user has to paste the url with the authorizaton code provided after authenticating
print('redirect_response: ', redirect_response)

# Fetches the access token AFTER the authentication code was given in the previous step
token = msgraph.fetch_token(token_url, client_secret=client_secret, authorization_response=redirect_response) # gets the access token
print('token: ', token)

, но я получаю следующее предупреждающее сообщение:

Предупреждение: область действия изменена с "https://graph.microsoft.com/User.Read https://graph.microsoft.com/offline_access" на"profile https://graph.microsoft.com/User.Read openid email".

РАЗРЕШЕНИЯ API В ПОРТАЛЕ AZURE

Microsoft Graph (2) Files.ReadWrite.All offline_access

Как видно из приведенных выше разрешений Azure, привилегии (области) на портале Azure точно такие же, как я запрашивал, поэтому мой вопрос: откуда эти ' openid ? '' и ' email ' прицелы? Мне удалось преодолеть предупреждение, но я не могу запросить необходимые мне привилегии. Я даже создал совершенно новое приложение на портале Azure, но у меня та же проблема. Что-то не так с библиотекой reports_oauthlib или я что-то не так делаю?

Спасибо

1 Ответ

0 голосов
/ 07 октября 2019

При запросе областей вам не нужно полное доменное имя (FQDN) для областей Графика (они используются по умолчанию), и вы не должны использовать их для областей без Графика (openid, profile, email и offline_access являются областями OpenID / AAD, а не Graph).

scopes = ["User.Read", "offline_access"]
...