<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Security &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/security/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Tue, 12 Oct 2010 04:24:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>PEARでTwitterのOAuthをしてみる備忘録</title>
		<link>https://blog.mach3.jp/2010/10/12/pear-twitter-oauth.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 12 Oct 2010 04:24:30 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=838</guid>

					<description><![CDATA[この記事の情報は古くなっています。PEARライブラリの替わりに、下記の記事のライブラリをお勧めします。 シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた OpauthとtmhOAuthで極めてお手軽 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
    この記事の情報は古くなっています。PEARライブラリの替わりに、下記の記事のライブラリをお勧めします。<br />
    <a href="/2012/10/hybridauth.html">シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた</a><br />
    <a href="/2012/08/opauth-and-tmhoauth-for-twitter.html">OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる</a>
</p>



<p>Twitterが最早ただのサービスとしてではなく「プラットフォーム」として広まる中で、<br />
これを活用したサービスの開発は我々の一つの課題となりつつあります。<br />
<a href="/2010/09/auth-anywhere.html">anywhereを利用した認証</a>は以前触れましたが、<br />
今回はPHPでOAuth認証をする方法をまとめてみます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TLMg82TUzRI/AAAAAAAABDk/z9lfF-fYn9s/201010112335.png" alt="PEARでTwitterのOAuthをしてみる備忘録"/></figure>



<p></p>



<span id="more-838"></span>



<h2 class="wp-block-heading">事前準備</h2>



<h3 class="wp-block-heading">アプリケーションの登録</h3>



<p>まずはTwitterでアプリケーションを登録しなければなりません。<br />
» <a href="http://dev.twitter.com/apps/new">New Twitter Application | dev.twitter.com</a><br />
※個人的にここのCaptchaはかなり手強かったです</p>



<p>必要事項を明記して登録すると、OAuthに必要な情報を出力してくれます。<br />
特に必要な項目は、次の三つ。きちんと控えておきます。</p>



<ul class="wp-block-list">
<li>Consumer key</li>



<li>Consumer secret</li>



<li>Registerd OAuth Callback URL<br /><br />（Twitter側で認証が完了した後で戻ってくる為のページURL）</li>
</ul>



<h3 class="wp-block-heading">PEARパッケージのインストール</h3>



<p>以下のパッケージが必要になりますので、インストールしておきます。</p>



<ul class="wp-block-list">
<li><a href="http://pear.php.net/package/Services_Twitter">Services_Twitter</a></li>



<li><a href="http://pear.php.net/package/HTTP_OAuth">HTTP_OAuth</a></li>
</ul>



<h2 class="wp-block-heading">STEP:0 認証の準備</h2>



<p>まず情報を整理して変数に突っ込んでおきましょう。<br />
また、PEARパッケージのロードとsession_startも忘れずに。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">session_start();

<span class="hljs-comment">// &#91;1] ライブラリのロード</span>
<span class="hljs-keyword">require_once</span>(<span class="hljs-string">"Services/Twitter.php"</span>);
<span class="hljs-keyword">require_once</span>(<span class="hljs-string">"HTTP/OAuth/Consumer.php"</span>);

<span class="hljs-comment">// &#91;2] URL情報</span>
$request_token_url = <span class="hljs-string">"http://api.twitter.com/oauth/request_token"</span>;
$access_token_url = <span class="hljs-string">"http://api.twitter.com/oauth/access_token"</span>;
$authorize_url = <span class="hljs-string">"http://api.twitter.com/oauth/authorize"</span>;

<span class="hljs-comment">// &#91;3] アプリケーションの情報</span>
$consumer_key = <span class="hljs-string">"&lt;貴方のConsumer Key&gt;"</span>;
$consumer_secret = <span class="hljs-string">"&lt;貴方のConsumer Secret&gt;"</span>;
$callback_url = <span class="hljs-string">"&lt;貴方のCallback URL&gt;"</span>;
</code></span></pre>


<p><a href="http://lh3.ggpht.com/_JJkNs5Ixl70/TLMg82TUzRI/AAAAAAAABDk/z9lfF-fYn9s/201010112335.png">2</a> URL情報は共通です。<br />
<a href="http://dev.twitter.com/apps/new">3</a> アプリケーションの情報は各々固有な物になるので、<br />
登録時にもらったキーと設定したURLを格納します。</p>



<h2 class="wp-block-heading">STEP1: 「リクエストトークン」を取得</h2>



<p>まずはじめにHTTP_OAuthを介して「リクエストトークン」を頂き、<br />
Twitterの認証用のURLを取得します。<br />
そして必要とあらば、リダイレクトさせてあげます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// &#91;1] インスタンス生成</span>
$consumer = <span class="hljs-keyword">new</span> HTTP_OAuth_Consumer( $consumer_key, $consumer_secret );

<span class="hljs-comment">// &#91;2] getRequestTokenでリクエストトークンを取得</span>
$consumer-&gt;getRequestToken( $request_token_url, $callback_url );

<span class="hljs-comment">// &#91;3] getToken/getTokenSecretで、トークンをセッションに保存</span>
$_SESSION&#91;<span class="hljs-string">"request_token"</span>] = $consumer-&gt;getToken();
$_SESSION&#91;<span class="hljs-string">"request_token_secret"</span>] = $consumer-&gt;getTokenSecret();

<span class="hljs-comment">// &#91;4] getAuthorizeUrlでURLを取得</span>
$auth_url = $consumer-&gt;getAuthorizeUrl( $authorize_url );

<span class="hljs-comment">// &#91;5] 必要とあらばリダイレクト</span>
header( <span class="hljs-string">"Location: "</span> . $auth_url );
</code></span></pre>


<h2 class="wp-block-heading">STEP:2 Twitter側でアプリケーションの使用を「許可」する</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TLCAQlvV6pI/AAAAAAAABDc/mauHDb_ElPY/201010092345.png" alt="アプリケーションの使用を許可"/></figure>



<p></p>



<p>認証用のURLに飛ばすとユーザにはこんなページが表示されます。<br />
「許可する」をクリックすると、アプリケーション登録時に設定した「Callback URL」に、<br />
パラメータにトークンを携えて戻ってきてくれます。</p>



<p>こんな感じに。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/<em>?oauth_token=&lt;トークン&gt;&amp;oauth_verifier=&lt;トークン&gt;</em></p>
</blockquote>



<h2 class="wp-block-heading">STEP:3 「アクセストークン」を取得する</h2>



<p>今度は、STEP2で飛ばされた先の「Callback URL」での処理となります。<br />
ユーザがパラメータに携えてきたトークンを元に、「アクセストークン」を取得します。<br />
STEP1とは別スクリプトになるケースも多いと思いますが、（その前提で書いています）<br />
STEP:0での変数が必要になるので忘れずにロード/格納しておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// &#91;1] インスタンスの生成</span>
$consumer = <span class="hljs-keyword">new</span> HTTP_OAuth_Consumer( $consumer_key, $consumer_secret );

<span class="hljs-comment">// &#91;2] セッションに保存しておいたリクエストトークンを$consumerにセットする</span>
$consumer-&gt;setToken( $_SESSION&#91;<span class="hljs-string">"request_token"</span>] );
$consumer-&gt;setTokenSecret( $_SESSION&#91;<span class="hljs-string">"request_token_secret"</span>] );

<span class="hljs-comment">// &#91;3] getAccessTokenでアクセストークンを取得</span>
$consumer-&gt;getAccessToken( $access_token_url, $_GET&#91;<span class="hljs-string">"verifier"</span>] );

<span class="hljs-comment">// &#91;4] セッションにアクセストークンを保存</span>
$_SESSION&#91;<span class="hljs-string">"access_token"</span>] = $consumer-&gt;getToken();
$_SESSION&#91;<span class="hljs-string">"access_token_secret"</span>] = $consumer-&gt;getTokenSecret();
</code></span></pre>


<p>パラメータで渡されたトークンは、<a href="http://dev.twitter.com/apps/new">3</a>の第二引数で使用されます。<br />
<a href="http://pear.php.net/package/Services_Twitter">4</a>で生成されたアクセストークンが最終的なトークンとなります。（お疲れ様でした！）</p>



<h2 class="wp-block-heading">STEP:4 貰った「アクセストークン」でAPIにアクセス</h2>



<p>いよいよアクセストークンを元に、TwitterAPIにアクセスします。<br />
今まで通りにHTTP_OAuth_Consumerクラスを用いるのですが、<br />
コンストラクタの第3/第4引数にアクセストークンを渡す点に注意です。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// &#91;1] コンシューマインスタンスを生成</span>
$consumer = <span class="hljs-keyword">new</span> HTTP_OAuth_Consumer(
    $consumer_key,
    $consumer_secret,
    $_SESSION&#91;<span class="hljs-string">"access_token"</span>],
    $_SESSION&#91;<span class="hljs-string">"access_token_secret"</span>]
);
<span class="hljs-comment">// &#91;2] Twitterインスタンスを生成し、コンシューマを渡す</span>
$twitter = <span class="hljs-keyword">new</span> Services_Twitter;
$twitter-&gt;setOAuth($consumer);
</code></span></pre>


<p>これで$twitterにTwitterAPIを使う能力が備わったはずです。（なんかかっこいい）<br />
試しにその能力を奮ってみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// ユーザのホームタイムラインを出力してみる</span>
$timeline = $twitter-&gt;statuses-&gt;home_timeline();
<span class="hljs-keyword">foreach</span>($tl <span class="hljs-keyword">as</span> $t){
    <span class="hljs-keyword">echo</span> $t-&gt;text;
    <span class="hljs-keyword">echo</span> <span class="hljs-string">"&lt;br /&gt;"</span>;
}
</code></span></pre>


<p>連々とツイートが表示されたら成功です。<br />
実際に$twitterにどのような力が備わるのかについては、<br />
公式のTwitterAPIドキュメントをご参照ください。<br />
cf) <a href="http://apiwiki.twitter.com/w/page/Twitter-API-Documentation">Twitter API Wiki / Twitter API Documentation</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>とにかくトークンがいっぱい飛び交うので気がとーくんなります。<br />
今後使う機会も多くなって来ると思うので、覚えておかねば…。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<dl>
<dt>2010/10/25</dt>
<dd>URLをhttpsからhttpに変更。SSLを使う場合は別途設定が必要になります。<br />
<a href="http://www.msng.info/archives/2010/01/twitter_api_oauth_with_php.php">PHPでTwitter APIのOAuthを使う方法まとめ &#8211; 頭ん中</a></dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
