Невозможно получить данные OneNote с помощью Graph API от Microsoft

Я пытаюсь получить данные конкретной страницы с помощью API графика.

Если я попытаюсь запустить https://developer.microsoft.com/en-us/graph/graph-explorer я смогу заставить его работать, а если я использую сгенерированный там токен, он также отлично работает в скрипте.

Но когда я пытаюсь сгенерировать код в скрипте и запустить сам, получаю ошибку 404.

Вот сценарий:

from msal import ConfidentialClientApplication

authority = "https://login.microsoftonline.com/common"

#get connection to the API working



app = ConfidentialClientApplication(client_id, authority = "https://login.microsoftonline.com/my-tenant-id", client_credential=client_secret)

result = app.acquire_token_for_client(['https://graph.microsoft.com/.default'])


if "access_token" in result:
    print('Access Token: ', result["access_token"])

    import requests
    #response = requests.get("https://graph.microsoft.com/v1.0/users", headers = {'Authorization': 'Bearer {}'.format(result["access_token"])})
    response = requests.get("https://graph.microsoft.com/v1.0/users/myuser/onenote/pages/page-id/content", headers = {'Authorization': 'Bearer '+result["access_token"]})

Разрешения Azure:

Скриншот ошибки:

Обозреватель графов

Собственно выхожу из мыслей о том, чего мне может не хватать.

Уже проверил все разрешения снова и снова.

Любое предложение будет очень оценено.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обратите внимание, что Graph Explorer использует разрешения типа Delegated, которые работают на основе доступа вошедшего пользователя.

Но ваш код Python использует поток учетных данных клиента для получения токена, который работает только с разрешениями типа Application. В моей записной книжке OneNote есть образец страницы с содержимым ниже:

Когда я запустил вызов API через Graph Explorer, он сработал и получил контент, как показано ниже:

GET https://graph.microsoft.com/v1.0/users/myuser/onenote/pages/page-id/content

Ответ:

Но когда я делаю то же самое, запуская ваш код Python, предоставляющий разрешения типа Delegated, я получаю следующую ошибку 40004:

Чтобы устранить эту ошибку, обязательно предоставьте Notes.Read.All разрешение Microsoft Graph типа Application с согласием, как показано ниже:

Когда я снова запустил код после предоставления вышеуказанного разрешения, я успешно получил ответ с содержимым страницы OneNote:

from msal import ConfidentialClientApplication

client_id = "appID"
client_secret = "secret"
app = ConfidentialClientApplication(client_id, authority = "https://login.microsoftonline.com/tenantId", client_credential=client_secret)

result = app.acquire_token_for_client(['https://graph.microsoft.com/.default'])

if "access_token" in result:
    print('Access Token: ', result["access_token"])
    print()
   
import requests
#response = requests.get("https://graph.microsoft.com/v1.0/users", headers = {'Authorization': 'Bearer {}'.format(result["access_token"])})
response = requests.get("https://graph.microsoft.com/v1.0/users/[email protected]/onenote/pages/pageId/content", headers = {'Authorization': 'Bearer '+result["access_token"]})

print(response.text)

Ответ:

Привет, Шридеви, у меня уже есть все разрешения в приложении, но проблема не устранена. Но спасибо за ваш вклад!!

19jmrs 11.07.2024 17:36

Не могли бы вы включить полное сообщение об ошибке и изображение разрешений API с портала, отредактировав свой вопрос?

Sridevi 11.07.2024 17:38

Да, конечно, только что добавил скриншот обоих!

19jmrs 11.07.2024 17:43

Дали ли вы согласие администратора на добавленные разрешения? Пожалуйста, добавьте также изображение обозревателя графиков, где вы получаете результаты для того же пользователя.

Sridevi 11.07.2024 17:52

Да, я предоставил права администратора для разрешений приложения. Изображение добавлено.

19jmrs 11.07.2024 18:16

Хорошо. после того, как я изменил ответ на json, я вижу это сообщение об ошибке: код: 30121, сообщение: у арендатора нет действующей лицензии Sharepoint. У меня есть личная учетная запись Microsoft с лицензией, нужно ли мне тоже платить за Sharepoint? Для чего я его не использую, смысла нет.

19jmrs 11.07.2024 18:21

Если вы пытаетесь получить доступ к личной учетной записи Microsoft, вам необходимо переключиться на делегированные потоки, такие как интерактивный поток или поток кода авторизации, для создания токена, создав регистрацию приложения с типом учетной записи как «Учетные записи в любом каталоге организации (любой каталог Azure AD — мультитенантный) и личные учетные записи Microsoft (например, Skype, Xbox)»

Sridevi 11.07.2024 18:26

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

19jmrs 11.07.2024 18:28

Давайте продолжим обсуждение в чате.

Sridevi 11.07.2024 18:29

Другие вопросы по теме