<?php
// Parámetros de configuración
$tenantId = "4d0d72ca-4111-4d09-80be-d91acd4612a7"; // Tu tenant ID
$clientId = "beab2a03-ee5b-4847-9844-93a183959c6e"; // El Client ID de la app
$clientSecret = "5x88Q~T2LWT2CSifzct~nWCYC2tZX9ZbHWP4CcnJ"; // El secreto generado en "Certificates & secrets"
$scope = "api://beab2a03-ee5b-4847-9844-93a183959c6e/.default"; // Ajusta con el ID URI de tu API
// Endpoint de token de Azure AD (v2.0)
$url = "https://l...content-available-to-author-only...e.com/{$tenantId}/oauth2/v2.0/token";
// Los datos que enviaremos en el POST
$data = [
'client_id' => $clientId,
'client_secret' => $clientSecret,
'scope' => $scope, // Para client_credentials, usar .default
'grant_type' => 'client_credentials'
];
// Iniciamos cURL
// Ejecutamos la petición
if ($response === false) {
}
// Verificamos código HTTP
if ($httpCode >= 200 && $httpCode < 300) {
// Decodificamos el JSON
if (isset($json['access_token'])) { $accessToken = $json['access_token'];
echo "Access Token obtenido exitosamente:\n";
echo $accessToken;
} else {
echo "Error: No se encontró 'access_token' en la respuesta.\n";
}
} else {
echo "La solicitud falló. Código HTTP: $httpCode\n";
echo "Respuesta: $response\n";
}
?>
PD9waHAKCS8vIFBhcsOhbWV0cm9zIGRlIGNvbmZpZ3VyYWNpw7NuCiR0ZW5hbnRJZCA9ICI0ZDBkNzJjYS00MTExLTRkMDktODBiZS1kOTFhY2Q0NjEyYTciOyAgIC8vIFR1IHRlbmFudCBJRAokY2xpZW50SWQgPSAiYmVhYjJhMDMtZWU1Yi00ODQ3LTk4NDQtOTNhMTgzOTU5YzZlIjsgICAgICAvLyBFbCBDbGllbnQgSUQgZGUgbGEgYXBwCiRjbGllbnRTZWNyZXQgPSAiNXg4OFF+VDJMV1QyQ1NpZnpjdH5uV0NZQzJ0Wlg5WmJIV1A0Q2NuSiI7ICAgICAgICAgICAgICAgICAgLy8gRWwgc2VjcmV0byBnZW5lcmFkbyBlbiAiQ2VydGlmaWNhdGVzICYgc2VjcmV0cyIKJHNjb3BlID0gImFwaTovL2JlYWIyYTAzLWVlNWItNDg0Ny05ODQ0LTkzYTE4Mzk1OWM2ZS8uZGVmYXVsdCI7IC8vIEFqdXN0YSBjb24gZWwgSUQgVVJJIGRlIHR1IEFQSQoKLy8gRW5kcG9pbnQgZGUgdG9rZW4gZGUgQXp1cmUgQUQgKHYyLjApCiR1cmwgPSAiaHR0cHM6Ly9sLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS97JHRlbmFudElkfS9vYXV0aDIvdjIuMC90b2tlbiI7CgovLyBMb3MgZGF0b3MgcXVlIGVudmlhcmVtb3MgZW4gZWwgUE9TVAokZGF0YSA9IFsKICAgICdjbGllbnRfaWQnID0+ICRjbGllbnRJZCwKICAgICdjbGllbnRfc2VjcmV0JyA9PiAkY2xpZW50U2VjcmV0LAogICAgJ3Njb3BlJyA9PiAkc2NvcGUsICAgICAgICAgICAgLy8gUGFyYSBjbGllbnRfY3JlZGVudGlhbHMsIHVzYXIgLmRlZmF1bHQKICAgICdncmFudF90eXBlJyA9PiAnY2xpZW50X2NyZWRlbnRpYWxzJwpdOwoKLy8gSW5pY2lhbW9zIGNVUkwKJGNoID0gY3VybF9pbml0KCR1cmwpOwpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgdHJ1ZSk7CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCBodHRwX2J1aWxkX3F1ZXJ5KCRkYXRhKSk7CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CgovLyBFamVjdXRhbW9zIGxhIHBldGljacOzbgokcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNoKTsKaWYgKCRyZXNwb25zZSA9PT0gZmFsc2UpIHsKICAgIGRpZSgnRXJyb3IgZW4gY1VSTDogJyAuIGN1cmxfZXJyb3IoJGNoKSk7Cn0KJGh0dHBDb2RlID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fSFRUUF9DT0RFKTsKY3VybF9jbG9zZSgkY2gpOwoKLy8gVmVyaWZpY2Ftb3MgY8OzZGlnbyBIVFRQCmlmICgkaHR0cENvZGUgPj0gMjAwICYmICRodHRwQ29kZSA8IDMwMCkgewogICAgLy8gRGVjb2RpZmljYW1vcyBlbCBKU09OCiAgICAkanNvbiA9IGpzb25fZGVjb2RlKCRyZXNwb25zZSwgdHJ1ZSk7CiAgICBpZiAoaXNzZXQoJGpzb25bJ2FjY2Vzc190b2tlbiddKSkgewogICAgICAgICRhY2Nlc3NUb2tlbiA9ICRqc29uWydhY2Nlc3NfdG9rZW4nXTsKICAgICAgICBlY2hvICJBY2Nlc3MgVG9rZW4gb2J0ZW5pZG8gZXhpdG9zYW1lbnRlOlxuIjsKICAgICAgICBlY2hvICRhY2Nlc3NUb2tlbjsKICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyAiRXJyb3I6IE5vIHNlIGVuY29udHLDsyAnYWNjZXNzX3Rva2VuJyBlbiBsYSByZXNwdWVzdGEuXG4iOwogICAgICAgIHByaW50X3IoJGpzb24pOwogICAgfQp9IGVsc2UgewogICAgZWNobyAiTGEgc29saWNpdHVkIGZhbGzDsy4gQ8OzZGlnbyBIVFRQOiAkaHR0cENvZGVcbiI7CiAgICBlY2hvICJSZXNwdWVzdGE6wqAkcmVzcG9uc2VcbiI7Cn0KPz4K