<?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>OAuth &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/oauth/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Tue, 02 Oct 2012 23:12:10 +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>シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた</title>
		<link>https://blog.mach3.jp/2012/10/03/hybridauth.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 02 Oct 2012 23:12:10 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2701</guid>

					<description><![CDATA[以前「Opauth」による簡単な認証を記事にしましたが、 またさらにシンプルな認証ライブラリ「HybridAuth」を知ったので試用してみました。 HybridAuthとは HybridAuth, Open Source [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>以前「<a href="http://opauth.org/">Opauth</a>」による簡単な認証を<a href="/2012/08/opauth-and-tmhoauth-for-twitter.html">記事にしました</a>が、 またさらにシンプルな認証ライブラリ「<a href="http://hybridauth.sourceforge.net/">HybridAuth</a>」を知ったので試用してみました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-GWtM7s04cXw/UGrvefjOH1I/AAAAAAAABnI/uEvq40SKWpk/s400/20121002-00.png" alt="シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた"/></figure>



<p></p>



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



<h2 class="wp-block-heading">HybridAuthとは</h2>



<h3 class="wp-block-heading"><a href="http://hybridauth.sourceforge.net/index.html">HybridAuth, Open Source Social Sign On PHP Library</a></h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-6_NT7AZXQmQ/UGrv4PFQhGI/AAAAAAAABng/YrxLwnTR8oo/s500/20121002-01.png" alt="HybridAuth"/></figure>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>HybridAuth enable developers to easily build social applications to engage websites vistors and customers on a social level by implementing social signin, social sharing, users profiles, friends list, activities stream, status updates and more.</p>
</blockquote>



<p>WebサイトにOAuth認証を簡単に設置する為のPHPライブラリです。 Twitter、Facebook等をはじめとした様々なサービスに対応しています。 サポートされているサービスは、現時点で32。</p>



<p>また、CodeIgniterやCake、Zend等のFWはもちろん、 WordPressやJoomula等のCMSのプラグインとしても利用できます。</p>



<ul class="wp-block-list">
<li><a href="http://hybridauth.sourceforge.net/download.html">II. Third-party Plugins | Download HybridAuth</a></li>
</ul>



<h2 class="wp-block-heading">HybridAuth と Opauth の違い</h2>



<p>HybridAuthはOpauthと似たタイプのライブラリですが、 この2者で大きく異る点、というよりはHybridAuthのメリットを2つご紹介します。</p>



<ol class="wp-block-list">
<li>自由にカスタマイズ可能なURL</li>



<li>APIにアクセスするメソッド</li>
</ol>



<h3 class="wp-block-heading">自由にカスタマイズ可能なURL</h3>



<p>Opauthは、ログインURLの一部にサービス名を含んでいないと正常に動きません。 URLの文字列から認証するサービスを判別する為です。 （ここらへん、前回の記事では説明不足でしたね。すみません。）</p>



<p>例えば、「http://www.example.com/login/twitter」ならtwitterの認証画面へ、 「http://www.example.com/login/facebook」ならFacebookの認証画面へ飛ぶわけですね。</p>



<p>一方HybridAuthには、そういった縛りはありません。 そのかわり、認証メソッドの引数にサービス名を渡す事になります。</p>



<h3 class="wp-block-heading">APIにアクセスするメソッド</h3>



<p>Opauthは認証するだけでしたが、HybridAuthは認証した後にAPIにアクセスしてgetしたりpostしたりできます。 これ一本で全部面倒見切れそうですね。</p>



<h2 class="wp-block-heading">簡単な使い方</h2>



<p>HybridAuthを hybirdauth/ ディレクトリに保存したと想定して、 次のようなファイル構成にしてみます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>login.php (ユーザーがアクセスするページ)<br />
  config.php (設定ファイル)<br />
  hybridauth/ (ダウンロードしたHybridAuthの構成ファイル)<br />
       ├ config.php<br />
       ├ index.php<br />
       ├ install.php<br />
       └ Hybrid/</p>
</blockquote>



<h3 class="wp-block-heading">設定ファイルを作る</h3>



<p>hybridauth/config.php を参考にして、config.phpを作って必要事項を明記しましょう。 ここでは、Twitterのログインに必要な物だけを記載しておきます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-keyword">return</span> <span class="hljs-keyword">array</span>(
    <span class="hljs-string">"base_url"</span> =&gt; <span class="hljs-string">"http://localhost:8080/hybridauth/"</span>,
    <span class="hljs-string">"providers"</span> =&gt; <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"Twitter"</span> =&gt; <span class="hljs-keyword">array</span>(
            <span class="hljs-string">"enabled"</span> =&gt; <span class="hljs-keyword">true</span>,
            <span class="hljs-string">"keys"</span> =&gt; <span class="hljs-keyword">array</span>(
                <span class="hljs-string">"key"</span> =&gt; <span class="hljs-string">"&#91;your app's consumer key]"</span>,
                <span class="hljs-string">"secret"</span> =&gt; <span class="hljs-string">"&#91;your app's consumer secret]"</span>
            )
        )
    )
);
</span></code></span></pre>


<dl>
<dt>base_url</dt>
<dd>実際にOAuthのやり取りをしてくれるスクリプトを指します。 多くの場合HybridAuthをインストールしたディレクトリになります。</dd>
<dt>providers</dt>
<dd>認証したいサービスの設定を列挙していきます。 Twitterの場合は、作成したアプリケーションの<em>consumer key</em>と<em>consumer secret</em>を記載します。</dd>
</dl>



<h3 class="wp-block-heading">ログイン処理を書く</h3>



<p>./login.php を用意して、ログイン処理を書いてみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-comment">// 設定ファイルを引数にして初期化する（配列でもOK）</span>
$auth = <span class="hljs-keyword">new</span> Hybrid_Auth( <span class="hljs-string">"./config.php"</span> );

<span class="hljs-comment">// 認証の実行（未認証の場合はここでリダイレクトされ、認証済みの場合はスルーされます）</span>
$twitter = $auth-&gt;authenticate(<span class="hljs-string">"Twitter"</span>);

<span class="hljs-comment">// ↓ ここから認証済みの場合の処理</span>
<span class="hljs-keyword">echo</span> <span class="hljs-string">"&lt;h1&gt;認証されています！&lt;/h1&gt;"</span>;

<span class="hljs-comment">// ユーザー情報をまとめてくれる getUserProfile() メソッド</span>
var_dump(
    $twitter-&gt;getUserProfile()
);

<span class="hljs-comment">// APIにアクセスしてみる</span>
var_dump(
    $twitter-&gt;api()-&gt;get(<span class="hljs-string">"account/verify_credentials.json"</span>)
);
</span></code></span></pre>


<p>コメントの通りです。authenticateメソッドだけでほとんど余計な処理は省かれて、スッキリしていますね。</p>



<p>実際の動作としては、こんな感じみたいです。</p>



<ol class="wp-block-list">
<li>ユーザーがlogin.phpにアクセス</li>



<li>hybridauth/index.php に移動、そこからサービスの認証画面へリダイレクト</li>



<li>認証が済んだらトークンをセッションに保存して、再びユーザーが元いたlogin.phpに移動</li>
</ol>



<h2 class="wp-block-heading">base_url について</h2>



<p>config.php で出て来た <em>base_url</em> ですが、少し補足しておきます。</p>



<p>要するにこの項目は、全ての認証処理を代理で行なってくれるイケてるしヤバい <em>hybridauth/index.php</em> にアクセスさせる為の物です。 もっと言えば、そこにアクセスしたユーザーに対して <em>hybridauth/index.php</em> に記述されている処理が走りさえすれば良いです。</p>



<p>ですので、上の例示では hybridauth/ ディレクトリが公開ディレクトリにある前提になっていますが、 そうでない場合（非公開ディレクトリになっていたり、フレームワークの都合上アクセス出来なくなっていたりする場合）、 アクセスさせるファイル内で hybridauth/index.php をインクルードしさえすれば動くはずです。</p>



<p>例えば、&#8221;base_url&#8221; を /auth.php 等として、該当ファイルを設置し、</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">require_once</span>(<span class="hljs-string">"/the/path/to/hybridauth/index.php"</span>);
</code></span></pre>


<p>等としておけば良いですね。</p>



<h2 class="wp-block-heading">気になった事柄</h2>



<p>公式の例示では、APIアクセスも、認証済みである事を前提としていました。</p>



<p>認証を使わず、アプリに割り振られたのアクセストークンを使ったAPIアクセスは可能なのか、が気になりました。<br />
それをするならそういうライブラリを使えば良いのですが、一つで済むならそれが一番ですよね。<br />
気が向いたら調べてみます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる</title>
		<link>https://blog.mach3.jp/2012/08/24/opauth-and-tmhoauth-for-twitter.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 24 Aug 2012 01:00:50 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2630</guid>

					<description><![CDATA[PHPでTwitterのAPIを利用する方法は何度かPEARのServices_Twitterと絡めて記事にした事がありましたが、 今回はもっと手軽に導入できるOpauthとtmhOAuthを紹介してみます。 認証はOp [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPでTwitterのAPIを利用する方法は何度かPEARのServices_Twitterと絡めて記事にした事がありましたが、 今回はもっと手軽に導入できる<em>Opauth</em>と<em>tmhOAuth</em>を紹介してみます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-fxH1YjDGGCc/UDaJLTvOyOI/AAAAAAAABkY/TJ0YFczT3JE/s400/20120824-00.png" alt="OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる"/></figure>



<p></p>



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



<h2 class="wp-block-heading">認証はOpauthで</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-wQYHOHBi93w/UDaJLT0qhxI/AAAAAAAABkY/ll1D5qbd53o/s500/20120824-01.png" alt="Opauth – Multi-provider authentication framework for PHP"/></figure>



<p></p>



<ul class="wp-block-list">
<li><a href="http://opauth.org/">Opauth – Multi-provider authentication framework for PHP</a></li>
</ul>



<p>Opauthは、様々なOAuth認証を一手に引き受けてくれる認証フレームワークです。</p>



<p>執筆時に公式に紹介されていた利用可能なサービスは、Twitter・Facebookなどを含め11件。 これらのサービスへの認証機能は<em>「ストラテジー」</em>という形で外部モジュールとして提供されます。 所謂ストラテジーパターンと呼ばれる物ですね。</p>



<p>その使い方は、認証のみにフォーカスしているライブラリなだけあって恐ろしくシンプルで簡単。 早速試してみます。</p>



<h3 class="wp-block-heading">インストール</h3>



<p>公式のダウンロードページからダウンロードするか、 Githubにリポジトリが公開されているのでそこからcloneします。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/uzyn/opauth">ダウンロードページ</a></li>



<li><a href="https://github.com/uzyn/opauth">GitHubリポジトリ</a></li>
</ul>



<p>公式の<em>「Opauth bundled with examples」</em>からなら、Twitter、Google、Facebookのストラテジーも同梱されているので 最初に試す際にはこれがおすすめです。 （それ以外ではストラテジーが空っぽの状態なので、別途ダウンロードしてくる必要があります）</p>



<h3 class="wp-block-heading">設定</h3>



<p>ダウンロードして解凍・設置したら、設定ファイルを用意します。 <em>opauth.config.php</em> などとしておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$opauth_config = <span class="hljs-keyword">array</span>(
    <span class="hljs-comment">/**
     * アプリケーションへのパス
     */</span>
    <span class="hljs-string">"path"</span> =&gt; <span class="hljs-string">"/the/path/to/"</span>,

    <span class="hljs-comment">/**
     * Twitterで認証した後に戻るコールバックURL。
     * {path} は前述のpathを展開してくれる。
     */</span>
    <span class="hljs-string">"callback_url"</span> =&gt; <span class="hljs-string">"{path}callback.php"</span>,

    <span class="hljs-comment">/**
     * ハッシュの生成に使われる文字列。任意の文字列を入れておく。
     */</span>
    <span class="hljs-string">"security_salt"</span> =&gt; md5(<span class="hljs-string">"foobar"</span>),

    <span class="hljs-comment">/**
     * ここからがストラテジーの設定
     */</span>
    <span class="hljs-string">"Strategy"</span> =&gt; <span class="hljs-keyword">array</span>(
        <span class="hljs-comment">/**
          * Twitterストラテジーの設定
          * key, secret はTwitterの公式から取得。
          */</span>
        <span class="hljs-string">"Twitter"</span> =&gt; <span class="hljs-keyword">array</span>(
            <span class="hljs-string">"key"</span> =&gt; <span class="hljs-string">"&#91;consumer_key]"</span>,
            <span class="hljs-string">"secret"</span> =&gt; <span class="hljs-string">"&#91;consumer_secret]"</span>
        )
    )
);
</code></span></pre>


<p><em>consumer_key</em> と <em>consumer_secret</em> は、 事前にTwitterでアプリケーションを登録して、自前の物を取得しておきましょう。</p>



<ul class="wp-block-list">
<li><a href="https://dev.twitter.com/apps/new">Create an application | Twitter Developers</a></li>
</ul>



<h3 class="wp-block-heading">試してみる</h3>



<h4 class="wp-block-heading">Twitterの認証画面へリダイレクト</h4>



<p>まず、Twitterの認証画面へリダイレクトするスクリプトを書きます。 ユーザはログイン時はこのページにアクセスする事になります。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/Opauth.php"</span>;
<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/opauth.config.php"</span>;

<span class="hljs-keyword">new</span> Opauth($opauth_config);
</span></code></span></pre>


<p>ライブラリと設定を読み込んでインスタンスを初期化するだけです。<br />
認証画面のURLの取得やらリクエストトークンの取得やらリダイレクト処理やら、<br />
面倒な部分は全て代行してくれます。素晴らしい。</p>



<h4 class="wp-block-heading">アクセストークンを取得</h4>



<p>今度は、Twitterの認証画面から返ってきたユーザの<em>アクセストークン</em>を取得します。</p>



<p>デフォルトの設定では、認証情報は全て$_SESSIONに入るので<br />
事前に*session_start()* しておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>

session_start();

<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/Opauth.php"</span>;
<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/opauth.config.php"</span>;


<span class="hljs-comment">/**
 * コールバック時には第二引数にfalseを入れて初期化する。
 */</span>
$opauth = <span class="hljs-keyword">new</span> Opauth($opauth_config, <span class="hljs-keyword">false</span>);

<span class="hljs-comment">/**
 * 認証情報を取得します。
 */</span>
<span class="hljs-keyword">if</span>(<span class="hljs-keyword">isset</span>($_SESSION&#91;<span class="hljs-string">"opauth"</span>]) &amp;&amp; <span class="hljs-keyword">isset</span>($_SESSION&#91;<span class="hljs-string">"credentials"</span>])){

    $uid = $_SESSION&#91;<span class="hljs-string">"opauth"</span>]&#91;<span class="hljs-string">"auth"</span>]&#91;<span class="hljs-string">"id_str"</span>]; <span class="hljs-comment">// Twitterの数字のID</span>
    $access_token = $_SESSION&#91;<span class="hljs-string">"credentials"</span>]&#91;<span class="hljs-string">"token"</span>]; <span class="hljs-comment">// アクセストークン</span>
    $access_token_secret = $_SESSION&#91;<span class="hljs-string">"credentials"</span>]&#91;<span class="hljs-string">"secret"</span>]; <span class="hljs-comment">// 秘密のアクセストークン</span>

}
</span></code></span></pre>


<p>コールバック時も、インスタンスを初期化してセッションから情報を取得するだけです。</p>



<p>ここで取得したアクセストークンを使ってTwitterAPIにアクセスするわけですが、<br />
Opauthは認証を代行するライブラリなので、その為の機能は備えていません。<br />
ここから先は、他のライブラリに代行してもらうことにします。</p>



<h2 class="wp-block-heading">APIの利用はtmhOAuthで</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-9PACCvvHn44/UDaJLflWeKI/AAAAAAAABkY/h47QCYyBv3w/s500/20120824-02.png" alt="themattharris/tmhOAuth"/></figure>



<p></p>



<ul class="wp-block-list">
<li><br />    <a href="https://github.com/themattharris/tmhOAuth">themattharris/tmhOAuth</a><br />  </li>
</ul>



<p>
  <em>tmhOAuth</em>は、PEARのServices_TwitterのようにTwitterAPIへのアクセスを代行してくれるライブラリです。<br />
  勿論認証機能も備えていますが、あまりにもOpauthが楽すぎたので作業分担をしてもらいます。
</p>



<p>
  その特徴としては、（ほぼ）単ファイルで構成されていること。<br />
  <em>tmhOAuth.php</em>をとってきて読み込むだけでその機能を利用する事ができるので、導入が容易いですね。<br />
  （正確には、tmhUtilities.php というユーティリティ用のファイルが同梱されていますが、<br />
  依存しているわけではありません）
</p>



<h3 class="wp-block-heading">
  試してみる<br />
</h3>



<p>
  基本的には、前項で取得した4つのトークンを引数にして初期化して、<br />
  あとはTwitterAPIへのリクエストを行うだけです。
</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/tmhOAuth.php"</span>;

<span class="hljs-comment">/**
 * tmhOAuthを初期化。
 * コンストラクタの引数はトークンをまとめた連想配列。
 */</span>
$twitter = <span class="hljs-keyword">new</span> tmhOAuth(
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"consumer_key"</span> =&gt; <span class="hljs-string">"&#91;consumer_key_for_your_application]"</span>,
        <span class="hljs-string">"consumer_secret"</span> =&gt; <span class="hljs-string">"&#91;consumer_secret_for_your_application]"</span>,
        <span class="hljs-string">"user_token"</span> =&gt; <span class="hljs-string">"&#91;access_token_of_the_user]"</span>,
        <span class="hljs-string">"user_secret"</span> =&gt; <span class="hljs-string">"&#91;access_token_secret_of_the_user]"</span>
    )
);

<span class="hljs-comment">/**
 * requestメソッドでTwitterAPIにリクエストを送る。
 * ここではユーザーのホームタイムラインを取得してみる。
 */</span>
$status = $twitter-&gt;request(
    <span class="hljs-string">"GET"</span>, <span class="hljs-comment">// リクエストメソッド</span>
    $twitter-&gt;url(<span class="hljs-string">"1/statuses/home_timeline"</span>), <span class="hljs-comment">// エンドポイントを指定</span>
    <span class="hljs-keyword">array</span>( <span class="hljs-string">"count"</span> =&gt; <span class="hljs-number">8</span> ) <span class="hljs-comment">// パラメータ</span>
);

<span class="hljs-comment">/**
 * requestの返り値はHTTPのステータスコード
 */</span>
<span class="hljs-keyword">if</span>($status == <span class="hljs-number">200</span>){
    <span class="hljs-comment">/**
     * データはメンバのresponseの中に、
     * さらに生のデータはその中の"response"の中にJSONで格納されている。
     */</span>
    $response = $twitter-&gt;response;
    $data = json_decode($response&#91;<span class="hljs-string">"response"</span>]);
    var_dump($data); <span class="hljs-comment">// あとは煮たり焼いたりする</span>
}
</span></code></span></pre>


<p>
  無事タイムラインを取得出来ましたでしょうか。<br />
  requestの返り値に注意しましょう。
</p>



<p>
  こちらのライブラリもまた、かなりシンプルな使い勝手になっていますね。
</p>



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



<p>
  PEARのServices_Twitterには、個人的にいくつかの不安がありました。
</p>



<ul class="wp-block-list">
<li><br />    ながらくβ版のままで、あまりメンテナンスされていない<br />  </li>



<li><br />    ローカルコピーでプロジェクトに同梱しづらい<br />  </li>
</ul>



<p>
  そこで他の選択肢を探していましたところ、<br />
  これらの2つのライブラリが候補として挙がって来ました。
</p>



<p>
  お手軽さも上々なので、今後是非試していきたいリソースです。
</p>
]]></content:encoded>
					
		
		
			</item>
		<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>
