2016-12-31 20 views
0

私はauth_session_tokenをAppleのDEPシステムからMDMサーバー用に取得しようとしています。私はPHPで作業しています。私はとても近くていますが、何らかの理由でAppleのサーバから次の応答を得続ける:PHP oAuth署名が無効 - Apple DEP

signature_invalidUnauthorized 

私は、オンラインでの研究を行うと、人々はOAuthをに関して使用されているさまざまな方法を試みてから、異なるもののslueを試してみました。しかし、悲しいことに、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は、私が送信し終わる何をされています。ここでは

は私が署名を作成しようとしています(これは私の最も最近の試みであるので、再び、私はさまざまな方法のslueを試してみました)方法ですoauth_signatureパラメータの正式な要求では、それは受け入れられることに終わらない。

これを解決する方法は誰か分かりますか?私はDEPポータルで私のサーバを追加したり、&シンボルで区切られた複数のコード/シークレットを使って試したり、それらを逆さまにしたりなど、アップルから入手した上記のさまざまな秘密やトークンを使って署名しようとしました...同じこと...

答えて

0

私はこれを長い時間テストして試して再始動して不満を感じることができました。私の署名では、それを生成する前に、私はアルファベット順にリストされたパラメータを持っていなかったので、署名は不一致でした。

あなたの署名を生成する際には、パラメータがアルファベット順であることを絶対に確認してください。