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