【问题标题】:PHP oAuth Signature Invalid - Apple DEPPHP oAuth 签名无效 - Apple DEP
【发布时间】:2016-12-31 18:34:47
【问题描述】:

我正在尝试从 Apple 的 DEP 系统获取我的 auth_session_token,用于我正在使用 PHP 开发的 MDM 服务器。我是如此接近,但由于某种原因不断收到来自 Apple 服务器的以下响应:

signature_invalidUnauthorized

我尝试了一系列不同的方法,包括在线研究和尝试人们使用的关于 oAuth 的不同方法。但遗憾的是,没有任何关于 Apple 的 DEP 服务器 oAuth 的具体信息。

很多人推荐使用 oAuth 类,但没有一个支持 Apple 的系统。所以看起来这一切都需要手动完成。

我已经采用了在我的 PHP 代码中使用 cURL 的方法,这似乎工作正常,但我无法获得正确的签名。

这是我尝试创建签名的方式(我再次尝试了各种不同的方法,所以这是我最近的尝试):

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 参数的官方请求中发送的,但它最终没有被接受。

有人知道如何解决这个问题吗?在 DEP 门户中添加我的服务器时,我尝试使用从 Apple 获得的不同秘密和/或令牌进行签名,尝试使用由 & 符号分隔的多个代码/秘密,翻转它们,等等......但是同样的事情......

【问题讨论】:

    标签: php curl oauth mdm dep


    【解决方案1】:

    经过长时间的测试、尝试、重启和挫折,我能够弄清楚这一点。结果在我的签名中,在生成它之前,我没有按字母顺序列出的参数,因此签名不匹配。

    因此,关键是在生成签名时,请绝对确保您的参数按字母顺序排列!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多