今回はGoogle App Engine上でOAuth認証をして,
GoogleAppEngineLauncherのメニューからFile=>"Add Existing Application..."を選択して,OAUTH_
とOAUTH_
を,
ポート番号を8081以外にする場合は,APP_
の番号を変更すれば良いです。また,
Google App Engineでは,
- evernote
- thrift
- python-oauth2
- httplib2
- gaeutilities
evernoteとthriftはeverenote-api-1.
今回は説明を簡単にするためにセッションによってOAuthの情報を管理するようにしています。Googleアカウントなどに紐付けて管理というのでも良いでしょう。
では,OAuthTokenHandler
クラスに処理が渡されます。
class OAuthTokenHandler(webapp.RequestHandler):
"""OAuthの認証手続き"""
def get(self):
## Webアプリケーション用キーの設定
consumer = oauth.Consumer(key=OAUTH_CONSUMER_KEY, secret=OAUTH_CONSUMER_SECRET)
## トークン取得後にOAuthサーバから転送してもらうURIの設定
params = { "oauth_callback": TOKEN_CALLBACK_URI }
## 最初の要求作成: この段階ではトークンはなし
request = oauth.Request.from_consumer_and_token(
consumer, token=None, http_method="GET", http_url=TOKEN_URI, parameters=params)
## 署名作成
request.sign_request(oauth.SignatureMethod_HMAC_SHA1(), consumer, None)
## 最初の要求
uri = request.to_url()
result = urlfetch.fetch(uri)
if result.status_code != 200:
self.redirect("/error")
return
## レスポンスから仮証明(リクエストトークン)を抽出
token = oauth.Token.from_string(result.content)
## OAuthサーバのユーザの認証・同意画面に飛ばす
request = oauth.Request.from_token_and_callback(
token=token, callback=TOKEN_CALLBACK_URI, http_url=AUTHORIZATION_URI)
uri = request.to_url()
self.redirect(uri)
まず,oauth_
で指定しておきます。また,
成功するとOAuthサーバから仮証明(以前のリクエストトークンに相当)の情報が返ってきます。次に,
ここでユーザ名・