Невозможно получить токен обновления для API Microsoft Graph, используя токен доступа в php

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

prnt.sc/zaudnSFYhecT

и ниже приведен код, который я пытаюсь добавить

 function RefreshToeknOutlook($params) {
        $res_data=[
            'error_msg'=>"",
            "full_res"=>[],
            "ol_access_token_new"=>"",
            "ol_refresh_token_new"=>"",
            "ol_token_expiry_date"=>""
        ];
        $error_msg = "";
        $url = $params['url'];
        $clientId=$params['clientId'];
        $refreshToken=$params['refreshToken'];
        $clientSecret=$params['clientSecret'];
        $data = [
            'client_id' => $clientId,
            'scope' => "Calendars.Read",
            'refresh_token' => $refreshToken,
            'grant_type' => 'refresh_token',
            'client_secret' => $clientSecret
        ];
        //'scope' => 'openid profile offline_access User.Read Calendars.ReadWrite',
        $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= 'Error:' . curl_error($ch);
        }
        curl_close($ch);

        $responseData = json_decode($response, true);
        $res_data['full_res']=json_decode($response);
        if (isset($responseData['error'])) {
            $error_msg= "Error: " . $responseData['error_description'] . "\n";
        } else {
            if (isset($responseData['refresh_token']))
            {
                $res_data['ol_access_token_new']=$responseData['access_token'];
                $res_data['ol_refresh_token_new']=$responseData['refresh_token'];
                $res_data['ol_token_expiry_date']=$responseData['expires_in'];

            }   
        }

        $res_data['error_msg']=$error_msg;
        return $res_data;

}//function

отсюда я взял ссылку. https://learn.microsoft.com/en-us/graph/auth-v2-user?tabs=http

это что-то еще, что мне делать?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

В моем случае я выполнил запрос авторизации ниже в браузере, чтобы получить значение кода, добавив offline_access в область видимости следующим образом:

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 offline_access
&state=12345

Когда я использовал это значение кода, включив область offline_access в параметры ниже, я получил токен обновления и токен доступа следующим образом:

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

Ответ:

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

POST https://login.microsoftonline.com/common/oauth2/v2.0/token
grant_type:refresh_token
client_id:appID
client_secret:client_secret
refresh_token: M.C518_BAY.0.U.-CvbB6hHQBC //paste the refresh token that you got above
scope: Calendars.Read 

Ответ:

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

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

Ответ:

он там? Я комментирую здесь, потому что хочу знать, что хочу интегрировать единый вход (SAML) в вышеуказанную функциональность. это возможно или нет?

Nilesh Daldra 10.07.2024 08:51

мне нужна твоя помощь в этом

Nilesh Daldra 11.07.2024 14:08

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