PHP OAuth подпись недопустимый-Apple DEP

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

signature_invalidUnauthorized

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

Многие люди рекомендуют использовать класс 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, пытался использовать несколько кодов / секретов, разделенных символом&, перевернул их и так далее…но то же самое…

1 ответ

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

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