2011-02-26 4 views
0

유효한 서명 키를 만들려고 해요 (지금 HMAC-SHA1 메서드를 사용하고 있습니다), 지금까지 여전히 유효하지 않습니다 (http://term.ie/oauth/example/client.php에서 온라인 테스트 서버를 사용하고 있습니다) :PHP Oauth가 서명 키를 작성합니까?

 function _build_signature_hmac($base_url, $params, $consumer_key, $token_secret = '') 
    { 
     // Setup base-signature data 
     $data = 'POST&' . $base_url . '&'; 

     // Sort the params array keys first 
     ksort($params); 

     // Attach params string 
     $data .= rawurlencode(http_build_query($params)); 

     // Build the signature key 
     $key = rawurlencode($consumer_key) . '&' . rawurlencode($token_secret); 

     return base64_encode(hash_hmac('sha1', $data, $key)); 
    } 

이것은 인증되지 않은 토큰에 대한 요청이기 때문에 $ token_secret 문자열은 비어 있습니다. secret&

POST&http://term.ie/oauth/example/request_token.php&oauth_consumer_key%3Dkey%26oauth_nonce%3D0uPOn3pPUbPlzWx2cO6citRPafIni5%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298745681%26oauth_version%3D1.0 

그리고 $ 키는 다음과 같습니다 : secret&

키/비밀 번호가 모두 정확하고 'invalid signature'라는 서버의 응답이 나타납니다. . 내가 올바른 방법으로 건축하고 있는가?

+0

나는, 먼저 자신의 단계에서 문자열 기반 서명을 생성하는 로직을 오토넷 제안 그래서 http://developer.netflix.com/resources/OAuthTest와 같은 테스트 페이지를 사용하여 서명 생성에 들어가기 전에 기본 문자열이 맞는지 확인할 수 있습니다. –

+0

링크를 제공해 주셔서 감사합니다. NetFlix Oauth 서버는 또한 유효하지 않은 서명을보고하기 때문에 내 서명에 문제가 있다는 결론을 내리는 것이 안전하다고 생각합니다. –

답변

1

내가 사용하고 구현의 방법 ....

public function build_signature($request, $consumer, $token) { 
    $base_string = $request->get_signature_base_string(); 
    $request->base_string = $base_string; 

    $key_parts = array(
     $consumer->secret, 
     ($token) ? $token->secret : "" 
    ); 

    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); 
    $key = implode('&', $key_parts); 

    return base64_encode(hash_hmac('sha1', $base_string, $key, true)); 
    } 



public static function urlencode_rfc3986($input) { 
    if (is_array($input)) { 
    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); 
    } else if (is_scalar($input)) { 
    return str_replace(
     '+', 
     ' ', 
     str_replace('%7E', '~', rawurlencode($input)) 
    ); 
    } else { 
    return ''; 
    } 

전혀 도움이된다면 ...

+0

코드 스 니펫을 보내 주셔서 감사합니다. $ 키가 'secret'로만 구성되어 있기 때문에 어떤 키를 사용하든 상관 없습니다. 따라서 RFC3986 인코딩 문제가 아닙니다. 어쩌면 그것은 저를 망쳐 놓은 서버 일 것입니다. –

관련 문제