코어 포인트
Oauth는 매번 사용자 이름과 암호를 입력하지 않고도 사용자를 대신하여 PHP 애플리케이션이 트위터에 게시 할 수있는 "발레 키"와 같습니다. 응용 프로그램은 소비자이고 사용자는 리소스 소유자이며 Twitter는 서버 또는 서비스 제공 업체입니다.
트위터에 정보를 게시하려면 응용 프로그램은 자체 클라이언트 자격 증명 인 소비자 키 및 소비자 키를 얻어야합니다. Twitter는 응용 프로그램이 등록 양식을 작성한 후 이러한 자격 증명을 부여하고 이름, 설명, 웹 사이트 URL 및 콜백 URL과 같은 정보를 제공합니다.
Consumer Key 및 Consumer Key는 애플리케이션이 Twitter API와 통신 할 수 있지만 사용자를 대신하여 트윗을 게시하려면 액세스 자격 증명이 필요합니다. 액세스 토큰 및 액세스 키도 필요합니다. 이들은 소비자 자격 증명을 사용하여 트위터 및 최종 사용자와 대화함으로써 얻습니다. -
이 기사는 요청 자격 증명 URL을 생성하는 데 필요한 코드, 문자열을 기반으로 서명을 구축하는 방법 및 액세스 자격 증명을 요청하는 URL을 만드는 방법을 포함하여 이러한 자격 증명을 얻는 방법에 대한 자세한 단계별 안내서를 제공합니다.
-
많은 사람들은 Oauth가 이해하기 어렵다고 생각합니다. 아마도 사람들은 타사 라이브러리가 제공 한 추상화가 Oauth 거래 단계를 이해할 필요가 없을 것이라고 기대하기 때문일 것입니다. 그러나 그렇지 않습니다. 이 기사는 두 부분으로 나뉩니다. OAUTH V1은 몇 가지 내장 기능 만 사용하여 사용자의 트위터 스트림에 메시지를 게시하여 PHP 응용 프로그램을 트위터 API에 연결하여 어떻게 작동하는지 보여줍니다. 이 기사에 제공된 샘플 코드는 교육 목적으로 만 사용됩니다. 실제 사용 및 오류 처리가 부족하며 실제 개발은 기존 OAUTH 라이브러리를 활용해야하지만이 기사를 읽은 후에는 OAUTH 작동 방식을 더 잘 이해하고 발생할 수있는 문제를 더 잘 해결할 수 있습니다.
- 소비자 자격 증명을 얻으십시오 매번 사용자 이름과 비밀번호의 조합을 요구하지 않고 사용자를 대신하여 트위터에 게시하면 "발레 키"가 필요합니다 ...이 키는 Oauth입니다. OAUTH 용어로 클라이언트 응용 프로그램은 소비자 라고하며 사용자는 리소스 소유자 이고 트위터는 Server 또는 서비스 제공 업체입니다. Twitter가 응용 프로그램이 게시 한 정보를 수락하기 전에 자신의 클라이언트 자격 증명을 얻어야합니다. Twitter (및 공개 API를 제공하는 대부분의 서비스)는 등록 양식 (Dev.twitter.com/apps에서 제공)을 완료 한 후 키와 키를 부여합니다. 트위터에서는 승인 프로세스 중에 응용 프로그램, 특히 이름, 설명 및 웹 사이트 URL을 식별하기 위해 몇 가지 정보를 제공해야합니다. 또한 콜백 URL을 입력해야하며 나중에 설명하겠습니다. 신청서 작성 양식을 제출 한 후에는 새 응용 프로그램의 세부 정보 페이지로 이동합니다. 아래로 스크롤하여 소비자 키와 키를 찾으십시오. 소수의 엔드 포인트 URL과 함께이 키가 필요합니다. 응용 프로그램은 기본적으로 읽기 전용 액세스 권한이 부여됩니다. 트윗이 게시되므로 설정 탭을 클릭하고 읽기 및 쓰기 액세스를 변경해야합니다.
공인 응용 프로그램
소비자 키 및 소비자 키를 사용하면 응용 프로그램이 Twitter API와 통신 할 수 있지만 이러한 키만으로는 다른 사용자를 대신하여 트윗을 게시 할 수 없습니다. 액세스 자격 증명이 필요합니다. 소비자 자격 증명을 사용하여 트위터 및 최종 사용자와 간단한 대화를 나누어 이러한 자격 증명을 얻으려면 서비스 제공 업체 (Twitter)에게 요청하십시오. 액세스 자격 증명을 얻는 것은 매우 번거롭지 만 운 좋게도 각 사용자마다 한 번만 수행하면됩니다. 사용자가 응용 프로그램을 재 승인하지 않고 나중에 사용하기 위해 자격 증명을 무기한으로 저장할 수 있습니다. 자격 증명에 대한 액세스를 요청하는 대화에는 자체 자격 증명 세트가 필요합니다.
권한 부여 단계 1 : 요청 자격 증명
권한 부여 프로세스는 일반적으로 사용자를 "인증 트위터"페이지로 안내하는 것으로 시작합니다. 이것은 트위터에서 요청 토큰을 시작하고 OAUTH 인증 프로세스를 시작하는 페이지입니다. 요청 된 자격 증명을 얻으려면 URL을 생성해야하며 자격 증명이 있으면 사용자를 트위터로 리디렉션하여 응용 프로그램 게시 권한을 부여 할 수 있습니다. 요청 요청 자격 증명에는 서명 요청이 필요하므로 요청의 다른 중요한 매개 변수와 함께 OAUTH 서명을 보내야합니다. 서명은 요청 된 매개 변수의 Base64 인코딩 해시 목록입니다. 트위터의 경우 해싱 알고리즘은 HMAC-SHA1입니다. 서명 프로세스는 소비자 키가 일반 텍스트로 전송 되더라도 다른 사람들이 응용 프로그램을 가장하여 자격 증명을 사용하는 것을 방지합니다. 귀하 (소비자)와 서버 (Twitter) 만 서명을 재현 할 수 있습니다. 두 사람은 서명을 해시하는 소비자 키를 알아야 할 유일한 엔티티이기 때문입니다. 서명이 기반을 둔 문자열을 만들어 봅시다 :
<?php
$requestTokenUrl = "http://api.twitter.com/oauth/request_token";
$authorizeUrl = "http://api.twitter.com/oauth/authorize";
$oauthTimestamp = time();
$nonce = md5(mt_rand());
$oauthSignatureMethod = "HMAC-SHA1";
$oauthVersion = "1.0";
$sigBase = "GET&" . rawurlencode($requestTokenUrl) . "&"
. rawurlencode("oauth_consumer_key=" . rawurlencode($consumerKey)
. "&oauth_nonce=" . rawurlencode($nonce)
. "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod)
. "&oauth_timestamp=" . $oauthTimestamp
. "&oauth_version=" . $oauthVersion);
로그인 후 복사
로그인 후 복사
위의 일부 변수 중 일부는 분명 할 수 있습니다. $ requestokenurl은 소비자 자격 증명을 얻을 때 트위터에서 가져 왔으며 $ Oauthtimestamp는 현재 Unix 타임 스탬프입니다. 덜 명백한 항목은 $ nonce이며, 이는 한 번만 사용되는 임의의 문자열에 지나지 않습니다 (각 트랜잭션은 다른 nonce를 사용합니다). 일반적으로 MD5 해시 랜덤 숫자는 Nonce로 매우 유용합니다. 또한 $ oauthsignaturemethod도 있으며, 이는 항상 트위터 용 hmac-sha1이고 트위터의 경우 $ oauthversion (현재 트위터의 경우 v1.0)이 있습니다. 다음으로, 서명 된 문자열은 $ sigbase로 구성됩니다. OAUTH는 서명 기반이 HTTP 메소드 여야한다고 지적하고 (이 경우 GET), "&"및 URL에 인코딩 된 요청 URL ($ RequestTokenUrl), 다른 "&", 그리고 마지막으로 URL 인코딩 및 알파계 키/값 쌍 목록 (값도 값을 포함해야 함)이 뒤 따른다는 점을 지적합니다. OAUTH에 URL 인코딩 된 컨텐츠가 필요한 경우 RFC-3986을 나타냅니다. php의 rawurlencode () 함수는 urlencode ()와 같이 공백을 "이 아닌"로 인코딩하기 때문에 작동합니다. 서명 키도 필요합니다. 열쇠는 항상 소비자 키와 "&", 1) OAuth 토큰 키 (아직없는 토큰 자격 증명의 일부) 또는 2) 아무것도 없습니다. 그런 다음 PHP의 내장 Hash_hmac () 함수를 사용하여 최종 서명을 생성 할 수 있습니다.
자격 증명을 요청하는 URL을 구축하기 위해 모든 부품을 모아서 다음과 같습니다.
<?php
$sigKey = $consumerSecret . "&";
$oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));
로그인 후 복사
로그인 후 복사
이 간단한 데모를 넘어서 더 많은 오류 처리가 필요하지만 지금은 오류가없고 $ 응답으로 임시 요청 자격 증명을받을 수 있다고 가정합니다. 트위터가 다시 전송 된 응답은 다음과 같습니다.
oauth_token 및 oauth_token_secret 값은 응답에서 추출되며 인증 프로세스의 두 번째 단계에서 사용자가 액세스하는 다음 링크를 빌드하는 데 사용됩니다. 사용자가 트위터의 권한 부여 페이지에서 반환 할 때 사용할 수 있도록 요청 된 자격 증명을 사용자 세션에 저장하는 것이 가장 좋습니다. 인증 URL은 Twitter를 사용하여 응용 프로그램을 등록한 후 세부 사항 페이지에서 사용할 수 있습니다. <?php
$requestUrl = $requestTokenUrl . "?"
. "oauth_consumer_key=" . rawurlencode($consumerKey)
. "&oauth_nonce=" . rawurlencode($nonce)
. "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod)
. "&oauth_timestamp=" . rawurlencode($oauthTimestamp)
. "&oauth_version=" . rawurlencode($oauthVersion)
. "&oauth_signature=" . rawurlencode($oauthSig);
$response = file_get_contents($requestUrl);
로그인 후 복사
이제 앱이 허가를 위해 사용자를 트위터로 보낼 수 있으므로 콜백 URL을 추가하여 트위터를 다시 앱으로 보낼 수 있습니다! 콜백 URL은 사용자가 사용자가 응용 프로그램을 대신하여 트윗을 보내도록 허가 한 후 트위터가 사용자에게 지시하는 주소에 지나지 않습니다. 세부 사항 페이지의 설정 탭에 지정됩니다. 트위터가 사용자를 콜백 URL로 리디렉션하면 확인에 사용할 수있는 초기 요청의 OAUTH_TOKE와 권한 부여 자격 증명에 사용할 수있는 OAUTH_VERIFIER의 두 가지 추가 매개 변수가 추가됩니다. 트윗을 게시 해야하는 세 자격 증명 세트에는 이제 두 개의 소비자 자격 증명과 요청 자격 증명이 있습니다. 다음 : 액세스 자격 증명!
권한 부여 2 단계 : 액세스 자격 증명 <code>oauth_token=mjeaYNdNYrvLBag6xJNWkxCbgL5DV6yPZl6j4palETU&oauth_token_secret=W45dnBz917gsdMqDu4bWNmShQq5A8pRwoLnJVm6kvzs&oauth_callback_confirmed=true</code>
로그인 후 복사
액세스 자격 증명을 얻으려면 oauth_token, oauth_token_secret가 필요하며 새로 얻은 OAuth_verifier가 필요합니다. 이 단계에는 세부 사항 페이지에 표시되는 액세스 토큰 URL에 대한 또 다른 서명 요청이 필요합니다.
$ AccessTokenUrl은 세부 정보 페이지에서 얻은 다음 엔드 포인트입니다. 새로운 $ Oauthtimestamp 및 $ nonce를 생성하고 Twitter 인증 페이지에서 $ OAuthVerifier를 다시 전송하십시오. 나열되지는 않았지만 $ _session 배열에서는 이전 단계의 요청 자격 증명이 있으며 필요한 요청 자격 증명도 필요합니다. 인증 프로세스 의이 단계에는 또 다른 서명 요청이 필요합니다. 서명이 구축되면 액세스 자격 증명 요청과 함께 사용됩니다. <?php
$requestTokenUrl = "http://api.twitter.com/oauth/request_token";
$authorizeUrl = "http://api.twitter.com/oauth/authorize";
$oauthTimestamp = time();
$nonce = md5(mt_rand());
$oauthSignatureMethod = "HMAC-SHA1";
$oauthVersion = "1.0";
$sigBase = "GET&" . rawurlencode($requestTokenUrl) . "&"
. rawurlencode("oauth_consumer_key=" . rawurlencode($consumerKey)
. "&oauth_nonce=" . rawurlencode($nonce)
. "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod)
. "&oauth_timestamp=" . $oauthTimestamp
. "&oauth_version=" . $oauthVersion);
로그인 후 복사
로그인 후 복사
이 시간 $ 응답에는 매우 유용한 screen_name, user_id 및 대망의 액세스 자격 증명이 포함되어 있습니다!
요약 <?php
$sigKey = $consumerSecret . "&";
$oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));
로그인 후 복사
로그인 후 복사
이 기사는 권한 부여 섹션을 종료합니다. 지금까지 새로운 Twitter 응용 프로그램을 만들고 제공된 소비자 자격 증명으로 OAuth "Dance"를 통해 액세스 자격 증명을 얻는 방법을 배웠습니다. 이 시리즈의 두 번째이자 마지막 부분에서는 액세스 자격 증명을 사용하여 사용자의 트위터 스트림에 트윗을 게시하는 방법에 대해 논의합니다.
(원래 그림은 여기에 보관되어야하지만 그림을 직접 표시 할 수 없으므로 사진 링크가 유지됩니다)
oauth 1.0 faq (faq)
(원래 FAQ 컨텐츠는 여기에 유지되어야하지만 기사의 길이로 인해 FAQ 부분은 단순성을 위해 여기서 생략됩니다.)
위 내용은 PHP 마스터 | Oauth 이해 - 처음부터 트윗, 1 부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!