1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20779 -->
4 <sect1 id="zend.gdata.authsub">
5 <title>AuthSub による認証</title>
8 AuthSub を使用すると、ウェブアプリケーションで
9 Google Data サービスへのアクセスのための認証ができるようになります。
10 ユーザの認証情報を処理するコードを自分で書く必要はありません。
14 Google Data AuthSub 認証についての詳細は、
15 <ulink url="http://code.google.com/apis/accounts/AuthForWebApps.html">http://code.google.com/apis/accounts/AuthForWebApps.html</ulink>
20 Google のドキュメントでは、ClientLogin 方式は
21 "インストールするアプリケーション" に適しており、一方 AuthSub は
22 "ウェブアプリケーション" に適しているとされています。
23 これらの違いは、AuthSub はユーザとのやりとりが発生するということです。
24 ブラウザのインターフェイスを用いて、リクエストのリダイレクトを行います。
25 ClientLogin では <acronym>PHP</acronym> のコードでアカウント情報を提供します。
26 ユーザが直接認証情報を入力する必要がなくなります。
30 AuthSub の場合の認証情報は、ウェブアプリケーションのユーザが入力します。
31 つまり、認証情報をユーザが知っておく必要があります。
35 <title>登録されたアプリケーション</title>
37 <classname>Zend_Gdata</classname> は、現在はセキュアなトークンの使用をサポートしていません。
38 なぜなら、デジタル証明書によるセキュアなトークンの取得を
39 AuthSub 認証がサポートしていないからです。
43 <sect2 id="zend.gdata.authsub.login">
44 <title>AuthSub 認証済みの Http クライアントの作成</title>
47 あなたの作成した <acronym>PHP</acronym> アプリケーションで、認証を行う
48 Google <acronym>URL</acronym> へのハイパーリンクを提供しなければなりません。そのためには
49 静的関数 <methodname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</methodname>
50 を使用します。この関数の引数には、あなたの作成した
51 <acronym>PHP</acronym> アプリケーションの <acronym>URL</acronym> を指定します。それにより、ユーザ認証の後に
52 Google からもとの場所にリダイレクトされるようになります。
56 Google の認証サーバからアプリケーションに戻ってくる際に、
57 <emphasis>token</emphasis> という名前の GET パラメータが設定されます。
58 このパラメータの値は、認証されたアクセスに使用する single-use トークンとなります。
59 このトークンを multi-use トークンに変換し、セッションに保存します。
64 <methodname>Zend_Gdata_AuthSub::getHttpClient()</methodname>
65 をコールします。この関数は <classname>Zend_Http_Client</classname>
66 のインスタンスを返します。このインスタンスには適切なヘッダが設定されており、
67 後でこの Http クライアントを使用して送信したリクエストは認証済みのものとなります。
71 以下の例は、<acronym>PHP</acronym> のウェブアプリケーションのコードです。
72 Google Calendar サービスに対する認証を行い、
73 認証済みの Http クライアントを使用して <classname>Zend_Gdata</classname>
77 <programlisting language="php"><![CDATA[
78 $my_calendar = 'http://www.google.com/calendar/feeds/default/private/full';
80 if (!isset($_SESSION['cal_token'])) {
81 if (isset($_GET['token'])) {
82 // single-use トークンをセッショントークンに変換します
84 Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
85 // セッショントークンをセッションに保存します
86 $_SESSION['cal_token'] = $session_token;
88 // single-use トークンを生成するためのリンクを表示します
89 $googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
90 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
92 echo "<a href='$googleUri'>ここ</a> " .
98 // Google とやり取りするための、認証済み HTTP クライアントを作成します
99 $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
101 // 認証済み Http クライアントを使用して Gdata オブジェクトを作成します
102 $cal = new Zend_Gdata_Calendar($client);
107 <sect2 id="zend.gdata.authsub.logout">
108 <title>AuthSub 認証の解除</title>
111 指定したトークンによる認証状態を終わらせるには、静的関数
112 <methodname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</methodname>
113 を使用します。そうしないと、このトークンはいつまでも有効なままになります。
116 <programlisting language="php"><![CDATA[
117 // アプリケーションのセキュリティ問題を避けるため、注意してこの値を作成します
118 $php_self = htmlentities(substr($_SERVER['PHP_SELF'],
120 strcspn($_SERVER['PHP_SELF'], "\n\r")),
123 if (isset($_GET['logout'])) {
124 Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
125 unset($_SESSION['cal_token']);
126 header('Location: ' . $php_self);
132 <title>セキュリティについて</title>
134 上の例における <varname>$php_self</varname> の扱い方は、
135 一般的なセキュリティ問題の対応法に従ったものです。
136 <classname>Zend_Gdata</classname> に固有のものではありません。
137 http ヘッダに出力する内容は、つねにフィルタリングするようにしましょう。
140 認証トークンの解除については、ユーザが Google Data
141 セッションを終わらせたときに行うのがお勧めです。
142 だれかがトークンを盗んで悪用するという可能性は非常に小さいものです。
143 とは言え、サービスの利用が終わったら認証も終了させておくことは大切です。