API Microsoft Graph Получить мои события API не работает

на Microsoft Graph API они предоставляют версии 1.0 и v2.0

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

и везде только что упоминались все API, которые есть в версии 1.0, и нет примера добавления событий календаря в версии 2.0.

infect я использовал их коллекцию почтальонов и использовал ее для генерации токена.

его токен успешно сгенерирован.

но когда я использовал API, который получает события моего календаря, он возвращает мне

{
    "error": {
        "code": "OrganizationFromTenantGuidNotFound",
        "message": "The tenant for tenant guid 'f3fd3de8-d438-4470-b351-5a7dde989db8' does not exist.",
        "innerError": {
            "oAuthEventOperationId": "10aaa007-edfb-4d36-ab46-d68e51af1e28",
            "oAuthEventcV": "bFc6s7xHD3sZPpSDf6Ve5Q.1.1",
            "errorUrl": "https://aka.ms/autherrors#error-InvalidTenant",
            "requestId": "41ca535c-2339-4e95-8915-2f1cdda88231",
            "date": "2024-06-10T06:12:02"
        }
    }
}

Я искал множество примеров и документов, но не нашел никакого решения.

в конце я обнаружил, что сгенерированный мной токен правильный, но когда я вызываю любой календарь addd или получаю API событий, он выдает мне эту ошибку.

Я добавил в приложение все полные разрешения для календарей.

Он должен добавить событие в календарь

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

$url = "https://login.microsoftonline.com/$row_comp->ol_tenant_id/oauth2/authorize?client_id=$row_comp->ol_client_id&response_type=code&redirect_uri=$url_auth&response_mode=query&scope=api://$row_comp->ol_client_id/Calendars.ReadWrite%20offline_access&state=12345";

выше — URL-адрес.

и по URL-адресу авторизации я добавил запрос на завивку

 $url = "https://login.microsoftonline.com/$tenant/oauth2/v2.0/token";

$data = [
    'client_id' => $clientId,
    'scope' => "Calendars.ReadBasic openid profile offline_access",
    'code' => $authorizationCode,
    'redirect_uri' => $redirectUri,
    'grant_type' => 'authorization_code',
    'client_secret' => $clientSecret
];

$options = [
    CURLOPT_URL => $url,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query($data),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/x-www-form-urlencoded'
    ],
];

$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if (curl_errno($ch)) {
    $error_msg='1 :. Error:' . curl_error($ch);
}
curl_close($ch);






$responseData = json_decode($response, true);
$full_object['first_call']=json_decode($response);
if (isset($responseData['error'])) {
    $error_msg= "1 :. Error: " . $responseData['error_description'] . "\n";
} else {
    if (isset($responseData['refresh_token']))
    {
        $ol_access_token_old=$responseData['access_token'];
        $ol_refresh_token_old=$responseData['refresh_token'];
        $accessToken = $responseData['access_token'];
        $refreshToken = $responseData['refresh_token'];
    }
}

А затем вызовите токен обновления

if ($refreshToken! = "")
{
    $url = "https://login.microsoftonline.com/$tenant/oauth2/v2.0/token";
    $params=[];
    $params['url']=$url;
    $params['clientId']=$clientId;
    $params['refreshToken']=$refreshToken;
    $params['clientSecret']=$clientSecret;
    $res_data=RefreshToeknOutlook($params);

    

        
                $full_object['second_call']=$res_data['full_res'];
                $error_msg=$res_data['error_msg'];
            
                $ol_access_token_new=$res_data['ol_access_token_new'];
                $ol_refresh_token_new=$res_data['ol_refresh_token_new'];
                $ol_token_expiry_date=$res_data['ol_token_expiry_date'];

        if ($ol_access_token_new! = "" && $error_msg= = "")
        {
            $dt=date("Y-m-d H:i:s");
            $ol_token_expiry_date=date("Y-m-d H:i:s",strtotime($dt." +".$ol_token_expiry_date." seconds"));
            $sql_update = "update tbl_admin set ol_authorization_code='".$db->real_escape_string($code)."'";
            $sql_update. = ",ol_access_token_old='".$db->real_escape_string($ol_access_token_old)."'";
            $sql_update. = ",ol_refresh_token_old='".$db->real_escape_string($ol_refresh_token_old)."'";
            $sql_update. = ",ol_access_token_new='".$db->real_escape_string($ol_access_token_new)."'";
            $sql_update. = ",ol_refresh_token_new='".$db->real_escape_string($ol_refresh_token_new)."'";
            $sql_update. = ",ol_token_expiry_date='".$db->real_escape_string($ol_token_expiry_date)."'";
            $sql_update. = ",ol_log_text='".$db->real_escape_string(json_encode($full_object))."'";
            $sql_update. = " where id='".$row_comp->id."'";
            
            $db->query($sql_update);
            
            
            
            
            
        }
}

Вышеуказанная функция возвращает токен. и используя это, я звоню

https://graph.microsoft.com/v1.0/me/events

но он возвращается

{
"error": {
    "code": "OrganizationFromTenantGuidNotFound",
    "message": "The tenant for tenant guid 'f3fd3de8-d438-4470-b351-5a7dde989db8' does not exist.",
    "innerError": {
        "oAuthEventOperationId": "10aaa007-edfb-4d36-ab46-d68e51af1e28",
        "oAuthEventcV": "bFc6s7xHD3sZPpSDf6Ve5Q.1.1",
        "errorUrl": "https://aka.ms/autherrors#error-InvalidTenant",
        "requestId": "41ca535c-2339-4e95-8915-2f1cdda88231",
        "date": "2024-06-10T06:12:02"
    }
}

}

Не могли бы вы рассказать, как вы сгенерировали токен доступа? Какой тип гранта вы использовали для получения токена?

Sridevi 10.06.2024 09:23

Да конечно. обновляю эти данные по вопросу, подождите

Nilesh Daldra 10.06.2024 09:27

@Sridevi, я обновил вопрос с подробностями

Nilesh Daldra 10.06.2024 09:31

Используете ли вы личную учетную запись Microsoft, например Outlook?

Sridevi 10.06.2024 09:32

@ Шридеви, да. одна из моих учетных записей, которую я зарегистрировал в Outlook, принадлежит Gmail

Nilesh Daldra 10.06.2024 09:32

Какой тип учетной записи вы выбрали на портале при регистрации приложения Azure AD?

Sridevi 10.06.2024 09:33

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

Nilesh Daldra 10.06.2024 09:34

@Sridevi, мне нужна помощь в создании токена обновления prnt.sc/zaudnSFYhecT

Nilesh Daldra 11.06.2024 08:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ошибка произошла, когда вы зарегистрировали приложение с поддерживаемым типом учетной записи как «Учетные записи в любом каталоге организации (любой клиент Microsoft Entra ID — мультитенант)», которое не будет работать с личными учетными записями Microsoft.

Чтобы устранить эту ошибку, вам необходимо создать регистрацию приложения с указанным ниже типом учетной записи, которая позволяет пользователям входить в систему с личными учетными записями Microsoft:

Теперь я добавил Calendars.Read разрешение типа «Делегированный» в свое приложение, как показано ниже:

Чтобы получить значение кода, я выполнил ниже запрос авторизации с конечной точкой /common в браузере Incognito, который просил пользователя войти в систему следующим образом:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?client_id=appId
&response_type=code
&redirect_uri=https://jwt.ms
&response_mode=query
&scope=Calendars.Read
&state=12345

Когда вы войдете в личную учетную запись Microsoft, например почту Outlook, вы попадете на страницу login.live.com:

После успешной аутентификации значение code в адресной строке начинается с «M.C51» для таких учетных записей Outlook:

Теперь я использовал это code, чтобы получить токен доступа, используя поток кода авторизации через Postman с параметрами ниже, и получил такой ответ:

POST https://login.microsoftonline.com/common/oauth2/v2.0/token
grant_type:authorization_code
client_id:appId
client_secret:secret
scope:Calendars.Read
code:code
redirect_uri:https://jwt.ms

Ответ:

Когда я использовал этот токен для вызова API, я успешно получил ответ с такими событиями:

GET https://graph.microsoft.com/v1.0/me/events

Ответ:

не могли бы вы показать мне, где я могу найти appId?

Nilesh Daldra 10.06.2024 16:42

Его можно найти на странице обзора регистрации приложения под названием «Идентификатор приложения (клиента)».

Sridevi 10.06.2024 16:51

@NileshDaldra Рад узнать, что это сработало :)

Sridevi 11.06.2024 06:29

я попытался войти в другую учетную запись, но мы получаем ошибку 1:. Ошибка: AADTS70000: запрос отклонен, поскольку одна или несколько запрошенных областей являются неавторизованными или срок их действия истек. Пользователь должен сначала войти в систему и предоставить клиентскому приложению доступ к запрошенной области. Идентификатор трассировки: 2082d941-8805-495f-b734-1bfe5bfde901 Идентификатор корреляции: f0932962-017c-474a-850d-3be2ccd52b6b Временная метка: 2024-06-11 13:32:09Z

Nilesh Daldra 11.06.2024 15:34

@NileshDaldra Не могли бы вы добавить сюда изображение ошибки и более подробную информацию, например, какая область используется? Дали ли вы согласие администратора на добавленные делегированные разрешения?

Sridevi 11.06.2024 16:27

Сейчас работает, это была проблема с типом гранта

Nilesh Daldra 14.06.2024 13:52

там мне нужна помощь. для единого входа

Nilesh Daldra 08.07.2024 05:14

Да, пожалуйста, опубликуйте новый вопрос с более подробной информацией и поделитесь ссылкой здесь.

Sridevi 08.07.2024 05:15
stackoverflow.com/questions/78718998/… @Sridevi
Nilesh Daldra 08.07.2024 05:21

@NileshDaldra Пожалуйста, добавьте тег Azure в этот вопрос и укажите здесь более подробную информацию о том, что именно вы подразумеваете под единым входом? Вы имеете в виду какие-либо блоги или документы? Пожалуйста, включите их тоже

Sridevi 08.07.2024 05:26

@NileshDaldra Как вы генерируете токен доступа? Какой поток аутентификации вы сейчас используете?

Sridevi 08.07.2024 06:22

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