ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター| Oauthの理解 - ゼロからのツイート、パート1
コアポイント
消費者資格情報を取得
ユーザーに代わってユーザー名とパスワードの組み合わせを要求せずにTwitterに投稿するたびに、「バレットキー」が必要です...このキーはOAuthです。 OAuthの用語では、クライアントアプリケーションは Consumer と呼ばれ、ユーザーは
消費者キーと消費者キーにより、アプリケーションはTwitter APIと通信できますが、これらのキーだけで他のユーザーに代わってツイートを投稿することはできません。アクセス資格情報が必要です:アクセスtokenおよび
アクセスkey。消費者資格情報を使用してTwitterおよびエンドユーザーと簡単な会話をすることでこれらの資格情報を取得するには、サービスプロバイダー(Twitter)にリクエストを行います。クレデンシャルにアクセスするのは非常に面倒ですが、幸運なことに、各ユーザーに対してこれを1回だけ行う必要があります。ユーザーがアプリケーションを再承認せずに、後で使用するために資格情報を無期限に保存できます。資格情報へのアクセスを要求する会話には、独自の資格情報のセットが必要です。 承認ステップ1:資格情報をリクエスト 認証プロセスは、通常、ユーザーを「承認Twitter」ページに向けることから始まります。これは、Twitterからリクエストトークンを開始し、OAuth認証プロセスを開始するページです。要求された資格情報を取得するためにURLを生成する必要があり、資格情報を取得したら、ユーザーをTwitterにリダイレクトしてアプリケーションの公開許可を付与できます。リクエストリクエストの資格情報には、署名リクエストが必要です。つまり、リクエスト内の他の重要なパラメーターとともにOAuth署名を送信する必要があります。署名は、要求されたパラメーターのBase64エンコードされたハッシュリストです。 Twitterの場合、ハッシュアルゴリズムは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);上記の変数のいくつかは非常に明白な場合があります - $ requesttokenurlは、消費者の資格情報を取得するとTwitterから取得され、$ oauthtimestampは現在のUnixタイムスタンプです。あまり明白ではないアイテムは$ nonceです。これは、1回だけ使用されるランダムな文字列にすぎません(各トランザクションは異なる非CEを使用します)。一般的に、MD5ハッシュ乱数はNonCeとして非常に有用です。また、$ oauthsignaturemethodもあります。これは常にTwitter用のHMAC-SHA1、Twitterの$ oauthversion、現在はTwitterのv1.0です。次に、署名された文字列は$ sigbaseとして構築されます。 Oauthは、署名ベースはHTTPメソッド(この場合は取得)でなければならないことを指摘し、その後に「&」が続き、URLエンコードされたリクエストURL($ requestTokenUrl)が続き、次に別の& "が続きます。 OAuthがURLエンコードコンテンツを必要とする場合、RFC-3986を指すことに注意してください。 phpのrawurlencode()関数は、urlencode()のように「」ではなく「」としてスペースをエンコードするため、機能します。署名キーも必要です。キーは、常に消費者キーに続いて「&」、1)OAuthトークンキー(まだ持っていないトークン資格情報の一部です)、または2)何もありません。その後、PHPの内蔵hash_hmac()関数を使用して、最終的な署名を生成できます。
<?php $sigKey = $consumerSecret . "&"; $oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));すべての部品をまとめて、資格情報を要求するURLを構築するために:
<?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);この単純なデモを超えたものに対してさらにエラー処理が必要ですが、今のところ、エラーがなく、$応答で一時的なリクエスト資格情報を受け取ることができると仮定しています。 Twitterから送信された応答は次のとおりです。
OAUTH_TOKENおよびOAUTH_TOKEN_SECRET値は、応答から抽出され、認証プロセスの2番目のステップでユーザーがアクセスする次のリンクを構築するために使用されます。ユーザーのセッションに要求された資格情報を保存して、ユーザーがTwitterの承認ページから戻るときに使用できるようにすることをお勧めします。承認URLは、Twitterを使用してアプリケーションを登録した後、詳細ページで利用できます。
<code>oauth_token=mjeaYNdNYrvLBag6xJNWkxCbgL5DV6yPZl6j4palETU&oauth_token_secret=W45dnBz917gsdMqDu4bWNmShQq5A8pRwoLnJVm6kvzs&oauth_callback_confirmed=true</code>
アプリがユーザーを承認のためにTwitterに送信できるようになったので、Twitterがアプリに送信できるようにコールバックURLを追加するのは良い時期です!コールバックURLは、ユーザーがアプリケーションに代わってツイートを送信するようにユーザーにユーザーに指示するアドレスにすぎず、詳細ページの[設定]タブで指定されています。 TwitterがユーザーをコールバックURLにリダイレクトすると、検証に使用できる最初のリクエストでOAUTH_TOKENと、認証資格に使用できるOAUTH_VERIFIERの2つの追加パラメーターを追加します。 3つの資格情報セットでは、ツイートを投稿する必要があるため、2つの消費者資格情報とリクエストの資格情報が2つあります。次:資格情報にアクセス!
<?php parse_str($response, $values); $_SESSION["requestToken"] = $values["oauth_token"]; $_SESSION["requestTokenSecret"] = $values["oauth_token_secret"]; $redirectUrl = $authorizeUrl . "?oauth_token=" . $_SESSION["requestToken"]; header("Location: " . $redirectUrl);承認ステップ2:資格情報へのアクセス
資格情報を取得するには、oauth_token、oauth_token_secret、および新しく取得したoauth_verifierが必要です。この手順には、詳細ページに表示されるアクセストークンURLのための別の署名リクエストが必要です。 $ AccessTokenurlは、詳細ページから取得した次のエンドポイントです。新しい$ oauthtimestampと$ nonceを生成し、Twitter認証ページから$ oauthverifierを送信します。リストされていませんが、$ _Sessionアレイには、前のステップからのリクエスト資格情報が必要です。承認プロセスのこのステップには、別の署名リクエストが必要です。署名が構築されると、アクセス資格情報リクエストとともに使用されます。 今回の$ responseには、非常に便利なscreen_name、user_id、および待望のアクセス資格情報が含まれています! 概要 この記事は、承認セクションを終了します。これまでのところ、新しいTwitterアプリケーションを作成し、提供された消費者の資格情報を使用してOAuthの「ダンス」を介してアクセス資格情報を取得する方法を学びました。このシリーズの2番目と最終部分では、アクセス資格情報を使用してツイートをユーザーの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);
<?php
$sigKey = $consumerSecret . "&";
$oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));
以上がPHPマスター| Oauthの理解 - ゼロからのツイート、パート1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。