curl — Подпись PHP oAuth недействительна — Apple DEP

Я пытаюсь получить свой auth_session_token из DEP-системы Apple для сервера MDM, над которым я работаю с PHP. Я так близко, но по какой-то причине продолжаю получать следующий ответ от сервера Apple:

signature_invalidUnauthorized

Я испробовал разные вещи: проводил исследования в Интернете и пробовал разные методы, которые люди использовали в отношении oAuth. Но, к сожалению, не было ничего конкретного относительно DEP-серверов Apple.

Многие люди рекомендуют использовать класс oAuth, но ни один из них не поддерживает систему Apple. Похоже, все это нужно делать вручную.

Я использовал подход cURL с моим PHP-кодом, это работает нормально, за исключением того факта, что я не могу получить правильную подпись.

Вот как я пытаюсь создать подпись (и снова я попробовал различные методы, так что это моя последняя попытка):

function rfc3986_encode($string) {
$result = rawurlencode($string);
$result = str_replace('%7E', '~', $result);
$result = str_replace('=', '%3D', $result);
$result = str_replace('+', '%2B', $result);

return $result;
}

$consumer = "CK_REDACTED";
$secret = "CS_REDACTED";
$secret2 = "AS_REDACTED";
$token = "AT_REDACTED";
$sign_method = "HMAC-SHA1";
$version = "1.0";
$url = "REDACTED";
$path = "REDACTED";

$timestamp = strtotime('now');
$mt = microtime();
$rand = mt_rand();
$nonce = md5($mt.$rand);

$post = array(
'oauth_consumer_key' => rfc3986_encode($consumer),
'oauth_token' => rfc3986_encode($token),
'oauth_signature_method' => rfc3986_encode($sign_method),
'oauth_timestamp' => rfc3986_encode($timestamp),
'oauth_nonce' => rfc3986_encode($nonce),
'oauth_version' => rfc3986_encode($version)
);

$signatureParameters = array();
foreach ($post as $parameter => $value) {
$signatureParameters[] = rfc3986_encode($parameter) . '=' . rfc3986_encode($value);
}

$signatureParameters = implode('&', $signatureParameters);

$baseString = "GET"."&".rfc3986_encode($url)
."&".rfc3986_encode($signatureParameters);

$key = rfc3986_encode($consumer) ."&";

$signature = base64_encode(hash_hmac('sha1', $baseString, $key));
$RFC3986signature = rfc3986_encode($signature);

Таким образом, $ RFC3986signature — это то, что я в итоге отправляю в официальном запросе на параметр oauth_signature, но в итоге его не принимают.

Кто-нибудь знает, как это решить? Я попытался подписаться с использованием различных секретов и / или токенов, указанных выше, полученных от Apple при добавлении моего сервера в портал DEP, и попытался использовать несколько кодов / секретов, разделенных & символ, перевернул их и так далее … но то же самое …

0

Решение

Я смог понять это после долгого тестирования, попытки перезапуска и разочарования. Оказывается в моей подписи, до ее генерации у меня не было параметров, перечисленных в алфавитном порядке, и, таким образом, подпись была несоответствующей.

Таким образом, ключ к этому, при создании вашей подписи, убедитесь, что ваши параметры в алфавитном порядке!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]