Ich verwende die Graph-API, um die Kalenderdaten aus Outlook abzurufen. Dafür authentifiziere ich den Benutzer über die OAuth2.0 API. Wenn der Benutzer die Berechtigung erteilt, erhalte ich das Zugriffstoken ohne Probleme. Aber leider nicht das Refresh-Token, um das Access-Token zu aktualisieren.Empfangstoken aber nicht das Aktualisierungstoken von Microsoft Graph API
Dies ist mein Code:
<?php
$client_id = "MY_CLIENT_ID";
$client_secret = "MY_CLIENT_SECRET";
$redirect = "MY_REDIRECT_URI";
if (!isset($_GET["code"])) {
?>
<a class="btn btn-default-active" href="<?php
echo "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?"
. "client_id=$client_id"
. "&"
. "scope="
. "https%3A%2F%2Fgraph.microsoft.com%2FUser.Read"
. "%20"
. "https%3A%2F%2Fgraph.microsoft.com%2FCalendars.Read"
. "%20"
. "https%3A%2F%2Fgraph.microsoft.com%2FCalendars.Read.Shared"
. "&response_type=code"
. "&redirect_uri=" . urlencode($redirect);
?>">Mit Office 365 verbinden</a><?php
} else {
$code = $_GET["code"];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://login.microsoftonline.com/common/oauth2/v2.0/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
"Content-type"=>"application/x-www-form-urlencoded",
"Content-Length"=>144
),
CURLOPT_POSTFIELDS => array(
"grant_type" => "authorization_code",
"client_id" => $client_id,
"client_secret" => $client_secret,
"code" => $code,
"redirect_uri" => $redirect),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
}
?>
ich es wie die offizielle Dokumentation zu tun (https://docs.microsoft.com/en-US/azure/active-directory/develop/active-directory-protocols-oauth-code) von Microsoft, aber immer noch keine Aktualisierungs-Token erhalten, während in der Dokumentation die Antwort wie so aussehen:
{
"access_token": " eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1388444763",
"resource": "https://service.contoso.com/",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA",
"scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
"id_token": " eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83ZmU4MTQ0Ny1kYTU3LTQzODUtYmVjYi02ZGU1N2YyMTQ3N2UvIiwiaWF0IjoxMzg4NDQwODYzLCJuYmYiOjEzODg0NDA4NjMsImV4cCI6MTM4ODQ0NDc2MywidmVyIjoiMS4wIiwidGlkIjoiN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlIiwib2lkIjoiNjgzODlhZTItNjJmYS00YjE4LTkxZmUtNTNkZDEwOWQ3NGY1IiwidXBuIjoiZnJhbmttQGNvbnRvc28uY29tIiwidW5pcXVlX25hbWUiOiJmcmFua21AY29udG9zby5jb20iLCJzdWIiOiJKV3ZZZENXUGhobHBTMVpzZjd5WVV4U2hVd3RVbTV5elBtd18talgzZkhZIiwiZmFtaWx5X25hbWUiOiJNaWxsZXIiLCJnaXZlbl9uYW1lIjoiRnJhbmsifQ.”
}
In meinem Fall sieht die respones wie so:
{
"token_type":"Bearer",
"scope":"https://graph.microsoft.com/calendars.read https://graph.microsoft.com/calendars.read.shared https://graph.microsoft.com/user.read",
"expires_in":3599,
"ext_expires_in":0,
"access_token":"ACCESS_TOKEN"
}
Ich habe auch versucht, das Ressourcen-Tag hinzuzufügen, funktioniert aber immer noch nicht. Was läuft falsch?
UPDATE
Ich versuche nun das Attribut hinzufügen:
CURLOPT_POSTFIELDS => array(
"grant_type" => "authorization_code",
"client_id" => $client_id,
"client_secret" => $client_secret,
"code" => $code,
"redirect_uri" => $redirect,
"prompt"=>"consent"),
Es funktioniert immer noch nicht.
Sie müssen wahrscheinlich die Offline-Zugriff fordern Sie ein Aktualisierungs-Token zu erhalten. – DaImTo
Okay und wie mache ich das? –
versuchen, prompt = Zustimmung zu Ihrer ursprünglichen Anforderung für die Authentifizierung hinzufügen. Lass es mich wissen, wenn du dann ein Refresh-Token bekommst. – DaImTo