Google Appsのデータに外部からアクセスしたくて、色々調べていたら、2-legged oauthと言う方法がスマートという事が分かり、色々試してみた。
他の認証方法は
・SSO(シングルサインオン) Apps側での設定が煩雑
・OpenID よく調べてないけど却下。
・Oauth 2leggedと3legged
んで、何がしたいかって言うと、
pythonのスクリプトから、Appsのデータにアクセスしたい。
の用途では、やり取りの手順が少ない2-legged oauthがスマートという判断。
Googleコードからサンプルスクリプトを引っ張ってきたのがこんな感じ。
import gdata.gauth
import gdata.docs.client
CONSUMER_KEY = 'example.com'
CONSUMER_SECRET = 'abc123doremi'
requestor_id = 'any.user@anydomain.com'
client = gdata.docs.client.DocsClient(source='yourCompany-YourAppName-v1')
client.auth_token = gdata.gauth.TwoLeggedOAuthHmacToken(
CONSUMER_KEY, CONSUMER_SECRET, requestor_id)
# Retrieve user's list of Google Docs
feed = client.GetDocList()
for entry in feed.entry:
print entry.title.text
そんでもってCONSUMER_KEY,CONSUMER_SECRETには、Appsのドメイン管理>高度なツール>OAuthドメインキーを管理するの所から取って来た、自分とこのドメインとシークレットキーを入力。
pythonの実行環境にeasy_installでgdataなるgoogle data APIを叩く為のモジュールをインストールしないと上記のコードは動きませんのであしからず。
実際に試したみたのですが、幾つかの設定の注意点があるのでそのままでは動きません。
ハマった点を箇条書きに。
・google appsでは動きません。(google apps for buisinessじゃないと駄目)
・サーバ側の情報をwebアプリケーションとしてgoogleに登録する必要があります。
・サーバ側でHTTPSの通信に対応してないと動きません。
・google apps側でもAPIを動かす許可が必要です。
という訳で、必然的にローカルでは正常な動作検証出来ませんし、普通のレンタルサーバでもモジュールの追加の関係で厳しいんじゃないかな?既に何らかの形で公開しているサーバで、root権限持ってるサーバが無いと駄目なので、その時点で結構敷居高めな感じです。
幸い、先日動いたサーバの方で動作検証出来たので事亡きを得ましたが…。
認証さえ通ってしまえば、後はほぼフルコントロールなので、結構色んな事が出来ます。
けれども、要は使い道って感じですね。
でもgoogle appsってまだまだニッチなんだよなぁ。便利なんだけど、エクセルとかに慣れた人とかだとほぼ覚え直しになっちゃうので、その辺が敷居高いのかなぁ。
スタートアップとかだとこんなに便利で低コストなモノ、他に無いんですけどね。