Ошибка 400 Bad Request при запросе токена доступа Azure для вошедшего в систему пользователяPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка 400 Bad Request при запросе токена доступа Azure для вошедшего в систему пользователя

Сообщение Anonymous »

Я настраиваю единый вход для входа на свой веб-сайт с помощью входа Microsoft. Когда пользователь входит в систему Microsoft и перенаправляется обратно на мой веб-сайт, мой сайт запрашивает и получает токен доступа. он работает нормально. Однако, если пользователь уже вошел в систему Microsoft, при запросе токена доступа возникает ошибка: либо ошибка 400 Bad Request, либо время ожидания запроса cURL.
Вот последовательность действий. Сначала пользователь щелкает ссылку здесь:
ШАГ 1:
https://login.microsoftonline.com//oauth2. /v2.0/authorize?client_id=&scope=https://graph.microsoft.com/User.Read&r ... _type=code
ШАГ 2:
Код возвращается на мой сайт в виде запроса GET. Эта часть всегда работает.
https:///?code=longcodestring&session_state=sesisonstatestring
Когда мой сайт получает код, он использует этот PHP-запрос cURL:
ШАГ 3:

Код: Выделить всё

           $curl = curl_init();
$params = array(
CURLOPT_URL =>
"https://login.microsoftonline.com/".AZURE_TENANT_ID."/oauth2/v2.0/token",
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS =>
"code=".$_GET['code']
."&grant_type=authorization_code"
."&scope=https://graph.microsoft.com/OpenID"
."&client_id=". AZURE_CLIENT_ID
."&client_secret=". AZURE_CLIENT_SECRET
."&redirect_uri=". "https://",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 4,
CURLOPT_TIMEOUT => 30,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'],
CURLOPT_NOBODY => false,
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
'Content-Type:application/x-www-form-urlencoded',
"Content-Length:1025",
),
);

curl_setopt_array($curl, $params);
$response = curl_exec($curl);
Если пользователь действительно входит в систему Microsoft, весь процесс работает нормально, и объект $response возвращает access_token. Однако, если пользователь уже вошел в систему Microsoft, при нажатии ссылки на ШАГЕ 1 страница входа в Microsoft пропускается и он сразу переходит к ШАГУ 2 и возвращается код. Итак, ШАГИ 1 и 2 всегда работают. Но ШАГ 3 в этом случае терпит неудачу. Ответом $ обычно является «Ошибка HTTP 400. Запрос неправильно сформирован». Иногда он просто превышает установленный лимит времени ожидания, равный 30.
Эта очень специфическая проблема уже поднималась в прошлом. Запрос токена доступа OAuth к Azure AD ::: 400 — неверный запрос
Однако этот вопрос был задан 9 лет назад, и в этом случае решением было добавить параметр «ресурс». Этот параметр больше не поддерживается, хотя я считаю, что он был заменен на «область», которую я уже использую.
Для меня не имеет смысла, почему использование кода для получения токена доступа работает в первый раз, но не во второй, поскольку вызов cURL всегда происходит после того, как пользователь вошел в систему. Поэтому в коде должно быть что-то, что отличается, когда он не выдается при новом входе в систему. Однако в запросе GET на мой сайт нет ничего особенного.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ed-in-user
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»