OAuth 2.0でWebサービスの利用方法はどう変わるか

OAuth 2.0で
Webサービスの利用方法はどう変わるか


ソーシャルAPI活用に必須の“OAuth”の基礎知識

株式会社ビーコンIT
木村篤彦
2011/2/2

OAuth 2.0を利用する際のコード例(Facebookの場合)

- PR -

 OAuth 2.0を利用する方法を説明します。例としてCrowyからFacebookにアクセスする際の手順とコードを抜粋して掲載します。

 最初に、client_idとclient_secretを取得する必要があります。

 Facebook開発者サイトの「Set Up New App」からFacebookアプリを登録すると、取得できます。

図4 Facebook開発者サイト
図4 Facebook開発者サイト

 作成したアプリの「Web Site」の編集画面を開くと、「アプリケーションID」と「シークレットキー」が表示されます。それが、OAuth 2.0のclient_idとclient_sercretです。サイトURLには、クライアントアプリのURLを指定します。これにより、このURLからのリクエストしか受け付けなくなり、フィッシングなどを防げます。この機能も、OAuth 2.0では仕様として定義されています。

図5 アプリの「Web Site」の編集画面
図5 アプリの「Web Site」の編集画面

 以下が実際のサーバ側のアプリのコードです。Google App Engineを使用しているため、Pythonで記述しています。定数として定義されている「FACEBOOK_APP_ID」「FACEBOOK_APP_SECRET」が上記のアプリケーションIDとシークレットキーです。

FACEBOOK_APP_ID = "9999999999999"
FACEBOOK_APP_SECRET = "abcdefghijklmnopqrstuvwxyz1234567890"

class FacebookHandler(webapp.RequestHandler):
def get(self):
verification_code = self.request.get("code")
args = dict(cliend=FACEBOOK_APP_ID, redirect_uri=self.request.path_url)
if verification_code is None:
# 【1】認証サーバにリダイレクト
args["scope"] = "offline_access,publish_stream,read_stream"
self.redirect(
"https://graph.facebook.com/oauth/authorize?" +
urllib.urlencode(args))
return
else:
# 【2】ユーザーが認証/認可処理を行うと、Facebookから認可コードが返って来る
args["client_secret"] = FACEBOOK_APP_SECRET
args["code"] = verification_code
# 【3】アクセストークンを要求する
response = cgi.parse_qs(urllib.urlopen(
"https://graph.facebook.com/oauth/access_token?" +
urllib.urlencode(args)).read())
# 【4】アクセストークンが返って来る
access_token = response["access_token"][-1]

# 【5】アクセストークンを使って保護されたリソースにアクセス
profile_res = unicode(urllib.urlopen(
"https://graph.facebook.com/me?" +
urllib.urlencode(dict(access_token=access_token))).read(),'utf-8')
profile = simplejson.loads(profile_res)

tmpl = os.path.join(os.path.dirname(__file__), "oauth_callback.html")
return self.response.out.write(template.render(tmpl, {}))

 このようにOAuth 2.0では、ライブラリをまったく使わずにOAuth 2.0対応のコードを記述できます。

OAuth 2.0の今後に注目!

 まとめますと、OAuth 2.0ではOAuth 1.0に比べて、以下のような3つのメリットがあります。

  1. 仕様が簡略化され使いやすくなった。
  2. Webブラウザ上で動作するアプリでも対応できるようになった
  3. 他のデバイスや多システム連携も多少考慮している

 紙面の都合上、4つのクライアントタイプのうち【2】ユーザーエージェントプロファイルは紹介できませんでしたが、JavaScriptだけでFacebookやTwitterにアクセスでき、これも大きな魅力です。

 OAuth 2.0は、今もメーリングリストで活発に議論されており、仕様策定の真っ最中です。しかし、FacebookやTwitterといった巨大プレーヤーがサポートを始めており、クライアント開発者にもサービスプロバイダにもお互いにメリットのある仕様なので、現在OAuth 1.0をサポートしているサービスプロバイダも今後はOAuth 2.0に対応して来るでしょう。今後もOAuth 2.0にぜひ注目してみてはいかがでしょうか。

 なお、OAuth 2.0の仕様についてさらに詳しく知りたい場合は、「OAuth.jp」コミュニティの方々が翻訳作業や情報発信をしているので、参考にするとよいと思います。

@IT関連記事


OAuthでバーコード情報Twitter投稿iPhoneアプリ
Web技術でネイティブアプリを作れるTitanium(3)
 iPad/iPhone開発も解禁になって再び要注目のTitanium。拡張「モジュール」を使ったアプリの作り方を解説します
Smart & Social」フォーラム 2010/10/21
Google OpenSocialによってSNSで何ができるのか?
SNSやWebを変える!? OpenSocial徹底解説(前編) SNSの共通APIとして発表されたOpenSocialの概要や登場した背景、どんなアプリを作ればいいのかを徹底解説!
Smart & Social」フォーラム 2008/3/14
知らないと損するFacebookファンページの作り方
Facebookのプロモーション活用術“超”入門 
プロモーション活用で注目を集めるFacebookのファンページ。簡単に作れるので、この機会にファンページを開設してみよう!
Smart & Social」フォーラム 2010/1/21
アプリが豊富な「Ning」で「自分SNS」を作ってみよう
SNS構築プラットフォームNing 
100万ものSNSネットワークを構築し、開発者コミュニティによるアプリ開発が活発な、SNS構築プラットフォームの「Ning」で「自分SNS」を作ろう
Smart & Social」フォーラム 2009/5/22
ID管理技術をつなぐ女神、コンコーディア
アイデンティティ管理の新しい教科書(2)
 ID管理技術の相互運用性確保のために発足した組織、「コンコーディア」。その出発点は、1つの「ベン図」でした
Security&Trust」フォーラム 2009/12/22

著者プロフィール


木村 篤彦(@a_kimura
オープンソースのOpenSocialコンテナ「infoScoop OpenSource
コミッタ。
マルチソーシャルメディアクライアント「Crowy」を開発。
「JavaScript、OpenSocial辺りが得意種目ですが、Java/Ruby/Pythonとかもちょこちょこやります。作っているアプリの関係で色々なサービスのAPIを触ってます」

株式会社ビーコンIT所属

3/3  

 INDEX
ソーシャルAPI活用に必須の“OAuth”の基礎知識
OAuth 2.0でWebサービスの利用方法はどう変わるか
  Page1
OAuthの現状
OAuth 1.0のおさらい
OAuth 1.0の3つの課題とは
  Page2
OAuth 2.0の3つの主な特徴
OAuth 2.0の4つのクライアントプロファイル
Webサーバプロファイルの場合の処理の流れ
Page3
OAuth 2.0を利用する際のコード例(Facebookの場合)
OAuth 2.0の今後に注目!


 Smart&Social フォーラム トップページへ



Smart & Social フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Smart & Social 記事ランキング

本日 月間