2011-01-23 7 views
2

웹 서비스 용 RESTful API를 작성 중입니다.
요청이 서버에 도착하면 먼저 appKey와 appSecret을 확인합니다. 나는 다음과 같은 요청에 추가 할 수 있기 때문에
이 POST 방법에 문제가되지 않습니다 :
이 (이 방법은 사용자의 세부 사항을 반환)GET 메소드에 컬을 사용하여 변수 추가하기

$data = array('appId'=>$appId, 
       'appSecret'=>$appSecret, 
       'userId'=>$uid); 
$url = "http://mydomain.com/api/user/".$uid; 
$request = curl_init($url); 
curl_setopt($request, CURLOPT_POSTFIELDS, $data); 
$result = curl_exec($request); 

내 질문은 (가능하다면) 내가 포함 할 수있는 방법입니다 GET 메소드의 데이터 (appSecret, appKey)?

그렇지 않은 경우 GET 메서드를 사용하여 사용자의 세부 정보를 얻고 서버에서 appKey 및 appSecret을 계속 확인하려면 어떻게해야합니까?

감사합니다.

+1

'GET' 문자열에 비밀 또는 키를 두는 것을 권장하지 않습니다. URL은 종종 서버 로그에 기록됩니다. 따라서 인증 정보를 배치하면 정보가 악의적 인 의도로 저장됩니다. 대신 http 헤더를 사용해보십시오. –

답변

4

GET 요청에서 인수는 URL의 "쿼리"섹션에 전달됩니다. 특정 문자가 특별한 의미를 가지고 있기 때문에 이런 방식으로 전달

http://www.google.com/search?q=url+query

인수 특별히, ("URL 인코딩") 인코딩해야합니다. 당신은 GET 요청의 헤더, 사용중인 appKey 및 appSecret 넣어하려는 경우

+0

$ 데이터 배열에 인수를 넣는 방법이 있습니까? –

+0

데이터의 보안에 걱정이된다면 (평소와 같이) 평문의 비밀을 요청에 넣는 것만으로는 충분하지 않습니다. 서비스에 대한 액세스 제어를 구현하려는 경우이를 처리 할 수있는 기존 솔루션이 수십 가지 있습니다. 암호화 프로토콜은 설계 상 또는 구현시에 악명이 높기 때문에 악의적 인 것을 발명하려고 시도하지 마십시오. –

+0

이러한 액세스 제어 중 하나를 권장 할 수 있습니까? –

2

이유는 다음과 같이 URL에 넣어하지 :

$의 URL = "http://mydomain.com/api/user/".$uid."?arg1=value1 & ARG2 = 값 2를 ";

+0

appKey 및 appSecret이 URL에 있어야합니다. –

+1

그런 다음 GET 요청을 원하지 않습니다. 위에서 Chris가 말한 것처럼 HTTP 헤더를 사용해야합니다. – majelbstoat

+0

cUrl과 함께 HTTP 헤더를 어떻게 사용할 수 있습니까? –

1

: 당신의 REST 서버에서 다음

$authorization = sprintf('Authorization: AppLogin key="%s", secret="%s"', urlencode($appKey), urlencode($appSecret)); 
curl_setopt($request, CURLOPT_HTTPHEADER, array($authorization)); 

을, 당신은 $ _SERVER [ 'HTTP_AUTHORIZATION'에서 응용 프로그램 키와 비밀을 얻을 수 있습니다 ]를 통해 preg_match.

매회 appSecret을 전달하는 대신 기본 서명 방법을 사용할 수도 있습니다.

$nonce = sha1(mt_rand()); 
$signature = sha1("$appKey:$appSecret:$nonce"); 
$authorization = 'Authorization: AppLogin key="%s", signature="%s", nonce="%s"', urlencode($appKey), urlencode($signature), urlencode($nonce)); 

는 서버에 먼저 다음 같은 방법을 사용하여 서명을 다시 appKey에 따라 응용 프로그램에 할당 된 비밀을 얻을 마지막으로 응용 프로그램에 의해 전송 된 서명을 비교, Authorization 헤더의 값을 얻는다.

관련 문제