我试图从Apple的DEP系统为我正在使用PHP的MDM服务器获取auth_session_token。我是如此接近,但由于某种原因,不断得到来自苹果公司的服务器如下回应:PHP oAuth签名无效 - Apple DEP
signature_invalidUnauthorized
我试图从网上做的研究和尝试不同的方法,人们已经使用OAuth的方面不同的东西极多。但遗憾的是,苹果的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 Portal中添加我的服务器时,尝试使用由&符号分隔的多个代码/秘密,将它们翻转过来等等,但我尝试使用从Apple获得的上述不同秘密和/或令牌进行签名,但是依此类推......但同样的事情...