Вызов методов onedrive с графиком API - PullRequest
0 голосов
/ 22 января 2020

Я купил MS Office, и они дают мне место на onedrive. Теперь я хочу работать с этим через API MS Graph в моем python консольном приложении (раньше я использовал python onedrivesdk, но теперь говорят, что он устарел).

I зарегистрировали приложение и можете видеть его через Azure AD на портале. azure .com.

В настоящее время я пытаюсь взаимодействовать с моим onedrive следующим образом:

tenant_id = 'xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx'
authority = f'https://login.microsoftonline.com/{tenant_id}'
scope = 'https://graph.microsoft.com/.default'

app = msal.ConfidentialClientApplication(self.client_id, authority=authority, client_credential=self.client_secret)
result = app.acquire_token_silent(["https://graph.microsoft.com/.default"], account=None)
if not result:
    logging.info("No suitable token exists in cache. Let's get a new one from AAD.")
    result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])

authToken = result['access_token']
#### Make a call to the graph API
graphResponse = requests.get('https://graph.microsoft.com/beta/me/drive',headers={'Authorization':f'Bearer {authToken}'})
if graphResponse.status_code != 200:
    print('Error code: ', graphResponse.status_code)
    print(graphResponse.text)

Я успешно получаю токен доступа, но когда я пытаюсь позвонить / me / drive

, я получаю status_code = 400 с

Текущий аутентифицированный контекст недопустим для этого запроса. Это происходит, когда запрос сделан к конечной точке, которая требует входа пользователя. Например, для / me требуется зарегистрированный пользователь. Получите токен от имени пользователя для отправки запросов к этим конечным точкам. Используйте поток кода авторизации OAuth 2.0 для мобильных и собственных приложений и неявный поток OAuth 2.0 для одностраничных веб-приложений

Я добавил разрешения для приложения на портале через "API Разрешение -> Добавить разрешение ", но я не могу дать согласие администратора (В другой учетной записи ms у меня есть полноценная подписка azure, где я являюсь администратором), потому что я не администратор. Но кто является администратором этой учетной записи, которой назначен мой офис MS?

1 Ответ

1 голос
/ 23 января 2020

Согласно предоставленному вами коду, вы используете поток учетных данных клиента OAuth 2.0 для завершения Azure аутентификации AD и получения токена доступа. Токен доступа, необходимый для участника службы. Мы не можем использовать токен доступа для вызова конечной точки /me/drive. Мы просто можем использовать токен доступа для вызова /users/<UserObjectIdOrUserPrincipalName}>/drive конечной точки. Для получения более подробной информации, пожалуйста, обратитесь к документу

. Поэтому, если вы хотите вызвать /me/drive конечную точку, я предлагаю вам использовать поток кода авторизации OAuth 2.0 . Относительно того, как реализовать это в вашем приложении, пожалуйста, обратитесь к sample .

...