
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 仕様と Google の ウェブ アプリケーションの OAuth 認証に関するドキュメントは、特定の定義に大きく依存しています。ここでは、Google の OAuth 実装のコンテキストにおける各定義の意味を明確にしましょう。
- 「OAuth ダンス」
OAuth 認証/認可プロセスの全体を説明するために私が作った非公式な用語です。
- (OAuth)リクエスト トークン
Google に、アプリケーションが Google Data API のいずれかへのアクセスをリクエストしていることを知らせる初期トークン。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 との類似性:
承認済みリクエスト トークンをアクセス トークンと交換することは、https://www.google.com/accounts/AuthSubRequestToken
とhttps://www.google.com/accounts/AuthSubSessionToken
でそれぞれ 1 回限りの AuthSub トークンを長期セッション トークンにアップグレードすることに似ています。AuthSub には初期リクエスト トークンの概念がない点が異なります。代わりに、ユーザーはAuthSubRequestToken
認証ページからトークン プロセスを開始します。 - (OAuth)サービス プロバイダ
Google Data APIs の場合、このプロバイダは Google です。一般に、サービス プロバイダは、OAuth エンドポイントを提供するウェブサイトまたはウェブサービスを説明するために使用されます。OAuth サービス プロバイダの別の例として、MySpace があります。
- (OAuth)コンシューマー
ユーザーのデータへのアクセス権限をリクエストするプログラム(つまり、アプリケーション)。OAuth プロトコルは、さまざまな種類のクライアント(ウェブ、インストール済み、パソコン、モバイル)に対応できる柔軟性を備えています。
注: OAuth プロトコルはデスクトップ アプリケーション/インストール型アプリケーションのユースケースをサポートしていますが、Google はウェブ アプリケーションの OAuth のみをサポートしています。
スタートガイド
登録
Google Data APIs で OAuth を使用するには、事前に少し設定を行う必要があります。OAuth リクエストはすべてデジタル署名されている必要があるため、まずドメインを登録し、公開証明書を Google にアップロードする必要があります。詳細については、ウェブベース アプリケーションの登録と登録モードで使用する鍵と証明書の生成をご覧ください。
署名リクエスト
ドメインが登録されると、リクエストの署名を開始できます。OAuth の最も難しい概念の 1 つは、oauth_signature
を適切に構築する方法と、署名ベース文字列の概念です。ベース文字列は、秘密鍵で署名するデータ(RSA_SHA1
を使用)です。結果は oauth_signature
に設定する値になります。
リクエスト例
GET
ユーザーの Google カレンダーのリスト(http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
)
ベース文字列の形式 | 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 で動作する認証コードを 1 つ記述できるのは、非常に便利です。今このプロトコルを学習しておけば、後で必ず役に立ちます。
OAuth Playground は、デベロッパーが OAuth の問題を解決するのに役立つツールとして私が作成したものです。Playground を使用すると、問題のデバッグ、独自の実装の確認、Google Data APIs のテストを行うことができます。
処理内容
- OAuth 認証フロー(リクエスト トークンの取得、トークンの承認、アクセス トークンへのアップグレード)を示します。
- 各リクエストの正しい署名ベース文字列を表示します。
- 各リクエストの正しい
Authorization
ヘッダーを表示します。 - 認証済みの Google データフィードを操作するために
oauth_token
を使用する方法を示します。GET
/POST
/PUT
/DELETE
データを取得できます。 - 認証済みフィードをブラウザで直接表示します。
- 独自の
oauth_consumer_key
(登録済みドメイン)と秘密鍵をテストできます。 oauth_token
で利用できる Google データフィード サービスを確認します。
デモ実行
ステップ 1: スコープを選択するまず、1 つ以上のスコープを選択して、使用する API を決定します。このデモでは、Blogger と Google コンタクトで動作するトークンをリクエストしています。 AuthSub との類似性: |
![]() |
ステップ 2: OAuth パラメータと設定を変更する現時点では、[Modify the OAuth Parameters] ボックスの設定は変更しないでください。後で、 注: ここで編集できるフィールドは
AuthSub との違い: |
![]() |
ステップ 3 ~ 5: アクセス トークンを取得するOAuth アクセス トークンを取得するには、次の 3 つの手順があります。最初の手順は、リクエスト トークンを取得することです。これにより、Google はアプリが OAuth フローを開始したことを認識します。 まず、[Get the Token] ボックスの [Request token] ボタンをクリックします。 特定のフィールドにデータが入力されます。
|
![]() ![]() |
次に、[トークンを取得] ボックスの [承認] ボタンをクリックします。 この認証ページで、[アクセスを許可] ボタンをクリックしてリクエスト トークンを認証し、OAuth Playground にリダイレクトします。 AuthSub との類似性: AuthSub との違い: ヒント: ウェブ アプリケーションを作成する場合は、 |
![]() |
最後に、[Get the Token] ボックスの [Access token] ボタンをクリックします。 この操作により、承認済みのリクエスト トークン(赤色の「アクセス トークン」ラベルで示されています)がアップグレードされます。 新しいトークンを取得する場合は、[start over] をクリックして 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"/>
[Enter a Google Data feed](Google データフィードを入力)に href URL を貼り付けます。
- 構文がハイライト表示されたパネルの上部にある [view plain] をクリックして、既存のエントリの XML をコピーします。ヘッダーではなく、レスポンスの本文のみをコピーします。
- HTTP メソッドのプルダウンを
PUT
に変更します。 - そのプルダウンの下にある [enter post data](投稿データを入力)をクリックし、ポップアップに
<entry>
XML を貼り付けます。 - [実行] ボタンをクリックします。
サーバーは 200 OK
で応答します。
ヒント: edit
リンクを手動でコピーする代わりに、[構文のハイライト表示] チェックボックスをオフにします。クエリの実行後、XML レスポンス本文内のリンクをクリックできるようになります。
まとめ
AtomPub/Atom Publishing Protocol(Google Data APIs の基盤となるプロトコル)や OAuth などのテクノロジーは、ウェブの発展に貢献しています。これらの標準を採用するサイトが増えるにつれて、デベロッパーはより多くのメリットを得られるようになります。キラーアプリの作成が突然難しくなります。
OAuth Playground や Google API での OAuth の使用についてご質問やご意見がある場合は、G Suite APIs and Marketplace APIs Support Forum にアクセスしてください。