webネタ

技術系ブログ。web系SE。1988。♂。@rhong_

GoogleのOAuth使ったからメモ

概要

ZendFrameworkのZend_Gdataを使用してDocsやSpredsheetのAPIを使用します。認証はGoogle独自のAuthSubというもので行います。サンプルがありとても簡単です。

登録方法

参考ドキュメント

http://code.google.com/intl/ja/apis/accounts/docs/RegistrationForWebAppsAuto.html

ここから自分のドメインを登録すると、OAuth認証できるようになります。
https://www.google.com/accounts/ManageDomains

1、アクセス元のURLを入れる。
(http://exsample.com/auth/google/googleへのOAuth認証リンクを貼ったらhttp://exsample.com/auth/google/を入力)

2、証明書を作成してUPする。
SSHで以下実行します。

openssl req \
  -x509 \
  -nodes \
  -days 365 \
  -newkey rsa:1024 \
  -sha1 \
  -subj '/C=US/ST=CA/L=Mountain View/CN=★ここにドメイン★' \
  -keyout ./gdata-key.pem \
  -out ./gdata-cert.pem

生成したgdata-cert.pemをupする。


以下実装の流れ。

1、Zend_Gdataのサンプルをダウンロードしてdemosフォルダのソースコードを見ます。

http://framework.zend.com/download/gdata

2、今回はDocs.phpを参考にしました。以下の3つの関数を使います。

  • getAuthSubUrl = googleの認証画面のurlを生成してくれます。
  • getAuthSubHttpClient = googleで認証後の処理で使います。
  • getCurrentUrl = 現在のURLを取得します。

3、数行で実現可能

以下アクションに書いた場合です。

まずgoogleの認証画面へ飛ばします。
$this->_redirect(getAuthSubUrl());
コールバック後、受け取ったtokenで内部的に認証したりします。
$client = getAuthSubHttpClient($this->_request->getQuery('token'));
Zend_Gdata_Docsを使って、ドキュメントの一覧を取得します。
$docs = new Zend_Gdata_Docs($client);
$docList = $docs->getDocumentListFeed();
一覧を出力します。
foreach ($docList as $doc) {
    echo '<p>';
    echo $doc->getTitle();
    echo '</p>';
}

とっても簡単。あとは、tokenをセッションに入れて管理したりするコードを書けばok。

てか独自の認証とかウザイ・・・もう全サービスOAuth1.0でいいじゃん・・・