ホームページ > バックエンド開発 > PHPチュートリアル > PHPマスター| Oauthの理解 - ゼロからのツイート、パート1

PHPマスター| Oauthの理解 - ゼロからのツイート、パート1

Lisa Kudrow
リリース: 2025-03-02 08:39:10
オリジナル
246 人が閲覧しました

PHP Master | Understanding OAuth - Tweeting from Scratch, Part 1

コアポイント

  • oauthは、毎回ユーザー名とパスワードを入力することなく、PHPアプリケーションがユーザーに代わってTwitterに投稿できるようにする「バレットキー」のようなものです。アプリケーションは消費者であり、ユーザーはリソースの所有者であり、Twitterはサーバーまたはサービスプロバイダーです。
  • 情報をTwitterに投稿するには、アプリケーションはConsumer KeyとConsumer Keyという独自のクライアント資格情報を取得する必要があります。 Twitterは、アプリケーションが登録フォームに記入した後にこれらの資格情報を付与し、その名前、説明、WebサイトURL、コールバックURLなどの情報を提供します。
  • Consumer KeyとConsumer Keyは、アプリケーションがTwitter APIと通信できるようにしますが、ユーザーに代わってツイートを投稿するには、アクセス資格情報:アクセストークンとアクセスキーも必要です。これらは、Consumer Credentialsを使用してTwitterおよびエンドユーザーと通信することによって取得されます。
  • この記事では、リクエスト資格情報を生成するために必要なコード、文字列に基づいて署名を作成する方法、アクセス資格情報を要求するURLを作成する方法など、これらの資格情報を取得する方法に関する詳細なステップバイステップガイドを提供します。
多くの人々は、OAUTHを理解するのが難しいと考えています。おそらく、サードパーティの図書館が提供する抽象化がOAUTHトランザクションのステップを理解する必要性を排除することを人々が期待しているからですが、そうではありません。この記事は2つの部分に分かれており、PHPアプリケーションをTwitter APIに接続することにより、いくつかの組み込み関数のみを使用してメッセージをユーザーのTwitterストリームに投稿する方法を示しています。この記事で提供されるサンプルコードは、教育目的のみを目的としています。実用的な使用とエラー処理が欠けており、実際の開発は既存のOAUTHライブラリを利用する必要がありますが、この記事を読んだ後、OAuthがどのように機能するかをよりよく理解し、発生する可能性のある問題をよりよく解決できるようになります。

消費者資格情報を取得

ユーザーに代わってユーザー名とパスワードの組み合わせを要求せずにTwitterに投稿するたびに、「バレットキー」が必要です...このキーはOAuthです。 OAuthの用語では、クライアントアプリケーションは Consumer と呼ばれ、ユーザーは surceing ownerと呼ばれ、Twitterはまたはと呼ばれます。 Twitterがアプリケーションで投稿された情報を受け入れる前に、あなた自身のクライアントの資格情報を取得する必要があります:Consumer Keyおよび Consumer Key 。 Twitter(およびPublic APIを提供するほとんどのサービス)は、登録フォームに記入した後にキーとキーを付与します(dev.twitter.com/appsで入手可能)。 Twitterでは、許可プロセス中にユーザーにアプリケーション、特にその名前、説明、WebサイトのURLを特定するための情報を提供する必要があります。また、コールバックURLを入力する必要があります。これについては後で説明します。 Createアプリケーションフォームを送信した後、新しいアプリケーションの詳細ページに移動します。下にスクロールして、消費者のキーとキーを見つけます。これらのキーが必要になり、少数のエンドポイントURLがリストされています。アプリケーションはデフォルトで読み取り専用アクセスが付与されていることに注意してください。 承認されたアプリケーション

消費者キーと消費者キーにより、アプリケーションは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のための別の署名リクエストが必要です。

<?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);
ログイン後にコピー
ログイン後にコピー

$ AccessTokenurlは、詳細ページから取得した次のエンドポイントです。新しい$ oauthtimestampと$ nonceを生成し、Twitter認証ページから$ oauthverifierを送信します。リストされていませんが、$ _Sessionアレイには、前のステップからのリクエスト資格情報が必要です。承認プロセスのこのステップには、別の署名リクエストが必要です。署名が構築されると、アクセス資格情報リクエストとともに使用されます。

<?php
$sigKey = $consumerSecret . "&";
$oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));
ログイン後にコピー
ログイン後にコピー

今回の$ responseには、非常に便利なscreen_name、user_id、および待望のアクセス資格情報が含まれています!

概要

この記事は、承認セクションを終了します。これまでのところ、新しいTwitterアプリケーションを作成し、提供された消費者の資格情報を使用してOAuthの「ダンス」を介してアクセス資格情報を取得する方法を学びました。このシリーズの2番目と最終部分では、アクセス資格情報を使用してツイートをユーザーのTwitterストリームに投稿する方法について説明します。

(元の写真はここに保持する必要がありますが、画像を直接表示できないため、写真リンクは保持されます)

oauth 1.0 FAQ(FAQ)

(元のFAQコンテンツはここで保持する必要がありますが、記事の長さのために、簡単にするためにFAQパーツはここで省略されています。)

以上がPHPマスター| Oauthの理解 - ゼロからのツイート、パート1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート