2008 年 9 月
はじめに
今はデベロッパーにとって絶好のタイミングです。ウェブでは数多くのオープン標準が採用され始めています。ご存じのとおり、Google は常に標準のファンとなり、オープンソース コミュニティを育んでいます。
最近、すべての Google Data API で OAuth のサポートが採用されました。OAuth は、デスクトップ アプリケーションとウェブ アプリケーションがユーザーの個人データにアクセスする方法を標準化することを目的としたオープン プロトコルです。OAuth は、標準の安全な方法で API 認証を行う手段を提供します。プログラマーは、可能な限りコードを再利用することを学びます。OAuth を使用すると、デベロッパーは記述する重複コードの量を減らし、さまざまなプロバイダが提供する複数のサービスと連携するツールを簡単に作成できます。
対象者
この記事では、読者が Google Data API のうち 1 つ以上に精通していることを前提としていますが、OAuth の概念を理解しているとは限りません。OAuth を使い始めたばかりの場合や、OAuth に興味がある場合にのみ、この記事では、このコンセプトの基本を紹介します。Google の OAuth 実装についても詳しく説明します。
このドキュメントは、特に高度なセキュリティで登録されたモードで AuthSub の使用に慣れているデベロッパーを対象としています。ここでは、2 つのプロトコルの類似点と相違点について説明します。AuthSub を使用するアプリケーションがある場合は、この情報を使用して OAuth に移行できます。OAuth は、オープンで最新のプロトコルです。
用語について
OAuth を理解するには、その用語を理解する必要があります。 OAuth の仕様と Google のウェブ アプリケーション用の OAuth 認証に関するドキュメントは、特定の定義に大きく依存しています。そのため、Google の OAuth 実装における各定義の意味を明確にします。
- 「OAuth ダンス」
OAuth 認証/認可プロセス全体を表す非公式の用語。
- (OAuth)リクエスト トークン
アプリケーションがいずれかの Google Data API へのアクセスをリクエストしていることを Google に知らせる初期トークン。OAuth ダンスの 2 つ目のステップは、ユーザーが手動でデータへのアクセス権を付与することです。このステップが成功すると、リクエスト トークンは承認されます。
- (OAuth)アクセス トークン
ダンスの最後のステップは、承認済みのリクエスト トークンをアクセス トークンと交換することです。アプリケーションでこのトークンを取得すると、トークンが取り消されない限り、ユーザーは OAuth ダンスをやり直す必要がなくなります。
AuthSub との類似点:
OAuth アクセス トークンは安全な AuthSub セッション トークンと同じものです。 - (OAuth)エンドポイント
これらは、アプリケーションの認証とアクセス トークンの取得に必要な URI です。OAuth プロセスの各ステップに 1 つずつ、合計 3 つのステップがあります。Google の OAuth エンドポイントは次のとおりです。
リクエスト トークンを取得します。 https://www.google.com/accounts/OAuthGetRequestToken
リクエスト トークンを承認します。 https://www.google.com/accounts/OAuthAuthorizeToken
アクセス トークンにアップグレードします。 https://www.google.com/accounts/OAuthGetAccessToken
AuthSub との類似点:
承認済みリクエスト トークンのアクセス トークンの交換は、1 回限りの AuthSub トークンを有効期間が長いセッション トークン(それぞれhttps://www.google.com/accounts/AuthSubRequestToken
とhttps://www.google.com/accounts/AuthSubSessionToken
)にアップグレードすることに似ています。違いは、AuthSub には最初のリクエスト トークンのコンセプトがないことです。代わりに、ユーザーはAuthSubRequestToken
認証ページからトークン プロセスを開始します。 - (OAuth)サービス プロバイダ
Google Data API の場合、このプロバイダは Google です。通常、サービス プロバイダは、OAuth エンドポイントを提供するウェブサイトまたはウェブサービスを示すために使用されます。OAuth サービス プロバイダのもう 1 つの例は MySpace です。
- (OAuth)コンシューマー
ユーザーのデータ(アプリケーション)へのアクセスをリクエストするプログラム。OAuth プロトコルは柔軟で、さまざまな種類のクライアント(ウェブ、インストール、デスクトップ、モバイル)に対応しています。
注: OAuth プロトコルはデスクトップ/インストール済みアプリケーションのユースケースに対応していますが、Google はウェブ アプリケーション用の OAuth のみをサポートしています。
スタートガイド
登録
Google Data API を使った OAuth の利用を開始するには、いくつかの設定が必要です。すべての OAuth リクエストはデジタル署名が必要なため、まずドメインを登録して、公開証明書を Google にアップロードする必要があります。その方法について詳しくは、ウェブベースのアプリケーションの登録と登録モードで使用する鍵と証明書の生成をご覧ください。
署名リクエスト
ドメインが登録されると、リクエストに署名する準備が整います。OAuth の最も難しいコンセプトの一つは、oauth_signature
を適切に構成する方法と、署名のベース文字列の概念です。ベース文字列は、RSA_SHA1
を使用して秘密鍵で署名したデータです。その結果は、oauth_signature
に設定した値です。
リクエストの例
http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
にあるユーザーの Google カレンダーのリストGET
ベース文字列の形式 | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
ベース文字列の例 | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
HTTP リクエストの例 |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
注: これはあくまでも目安です。oauth_signature
がはるかに長くなります。
ベース文字列に関する注意事項:
orderby=starttime
クエリ パラメータは、残りのoauth_*
パラメータと一緒に辞書順バイト値順で並べ替えられます。- この文字列には、「?」文字も含まれません。
base-http-request-url
部分には、URL エンコードされたベース URL(http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
)のみが含まれます。oauth_token
は二重 URL エンコードされます。
Authorization
ヘッダーに関する注意事項:
Authorization
パラメータでは、oauth_*
パラメータの順序は関係ありません。- ヘッダーには、ベース文字列と同様に
orderby=starttime
が含まれていません。クエリ パラメータはリクエスト URL の一部として維持されます。
OAuth を使用したリクエストへの署名について詳しくは、OAuth リクエストへの署名をご覧ください。
AuthSub との違い:
比較のため、セキュア AuthSub を使った同じ例を以下に示します。
ベース文字列の形式 | base_string = http-method http-request-URL timestamp nonce |
---|---|
ベース文字列の例 |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
HTTP リクエストの例 |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
AuthSub を使用したリクエストへの署名について詳しくは、AuthSub リクエストに署名するをご覧ください。
OAuth Playground ツール
目的
一部のユーザーから、OAuth は学習曲線が高いと言われました。Google の他の認証 API と比較して、同意します。OAuth の利点は、他の Google 以外のサービスを使用するようにアプリを拡張することで明らかになります。さまざまなサービス プロバイダとその API で機能する単一の認証コードを記述することが、非常にうまくいっているように思われます。プロトコルの学習には、後ほどお礼を申し上げます。
OAuth Playground は、デベロッパーが OAuth の困難を克服するために作成したツールです。 プレイグラウンドを使用すると、問題のデバッグ、実装の確認、Google Data API のテストなどに役立ちます。
処理内容
- リクエスト トークンの取得、トークンの承認、アクセス トークンへのアップグレードという OAuth 認証フローについて説明します。
- 各リクエストの正しい署名ベース文字列を表示します。
- リクエストごとに正しい
Authorization
ヘッダーを表示する。 oauth_token
を使って、認証済みの Google データフィードを操作する方法を示します。GET
/POST
/PUT
/DELETE
件のデータを利用できます。- 認証済みフィードをブラウザで直接表示します。
- 独自の
oauth_consumer_key
(登録済みドメイン)と秘密鍵をテストできます。 oauth_token
で利用できる Google データフィード サービスをご確認ください。
デモの実行
ステップ 1: スコープを選択するまず、1 つ以上のスコープを選択して、使用する API を決定します。このデモでは、Blogger と Google コンタクトで使用できるトークンをリクエストします。 AuthSub との類似点: |
|
ステップ 2: OAuth のパラメータや設定を変更する今は、[OAuth パラメータを変更] ボックスで設定を変更しないでください。後で独自の秘密鍵でテストを行うには、 注: ここで編集できるフィールドは
AuthSub との違い: |
|
ステップ 3-5: アクセス トークンを取得するOAuth アクセス トークンを取得するには 3 つのステップがあります。まず、リクエスト トークンを取得します。これにより、アプリケーションが OAuth ダンスを開始していることが Google に通知されます。 まず、[Get the Token] ボックスの [Request token] ボタンをクリックします。 特定のフィールドにはデータが入力されます。
|
|
次に、[トークンを取得] ボックスの [承認] ボタンをクリックします。 この承認ページで [アクセスを許可] ボタンをクリックすると、リクエスト トークンが承認され、OAuth Playground にリダイレクトされます。 AuthSub との類似点: AuthSub との違い: ヒント: ウェブ アプリケーションを作成する場合は、ユーザー エクスペリエンスが向上するため、 |
|
最後に、[Get the Token] ボックスの [Access token] ボタンをクリックします。 これにより、承認済みのリクエスト トークン(赤色の「アクセス トークン」のラベル)がアップグレードされます。 新しいトークンを取得する場合は、[やり直す] をクリックして OAuth ダンスを再開してください。 面白いことをしてみましょう! |
アクセス トークンの使用
これで、フィードのクエリ、データの挿入、更新、削除を行う準備が整いました。最後の 3 つの HTTP メソッドを実行するときは、実際のデータを扱う際に注意してください。
ヒント: アクセス トークンに使用可能なフィードを確認するには、[利用可能なフィード] ボタンをクリックします。
クエリの例を次に示します。GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3
この例では、特定のブログに対する投稿が 3 件を超えないようにします。構文のハイライト表示された領域の下にある [ブラウザで表示] リンクをクリックして、返されたフィードまたはエントリをブラウザで直接表示することもできます。
例: 投稿を更新する方法
- 更新する投稿で rel="edit" を含む
<link>
要素を見つけます。次のようになります。<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
[Google データフィードを入力] の入力欄に href URL を貼り付けます。
- 構文ハイライト表示パネルの上部にある [プレーンを表示] をクリックして、既存のエントリの XML をコピーします。レスポンスの本文のみをコピーします。ヘッダーはコピーされません。
- HTTP メソッドのプルダウンを
PUT
に変更します。 - そのプルダウンの下にある [投稿データを入力] をクリックし、ポップアップに
<entry>
XML を貼り付けます。 - [実行] ボタンをクリックします。
サーバーは 200 OK
で応答します。
ヒント: edit
リンクを手動でコピーするのではなく、[構文のハイライト表示?] のチェックボックスをオフにします。クエリの後、XML レスポンス本文内のリンクをクリックできます。
まとめ
ウェブの発展には、AtomPub/Atom Publishing Protocol(Google Data API の基盤となるプロトコル)や OAuth などのテクノロジーが役立ちます。 これらの基準を採用するサイトが増えれば、開発者が優勝です。殺人アプリを作成するのは次第に困難になります。
OAuth Playground や、Google API で OAuth を使用するにあたってご不明な点やご意見などありましたら、G Suite API と Marketplace API のサポート フォーラムをご利用ください。