| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <!-- EN-Revision: 24249 -->
- <sect1 id="zend.auth.adapter.openid">
- <title>Open ID 認証</title>
- <sect2 id="zend.auth.adapter.openid.introduction">
- <title>導入</title>
- <para>
- <classname>Zend_Auth_Adapter_OpenId</classname>
- は、リモートの OpenID サーバを使用したユーザ認証を行います。
- この認証方式では、ユーザがウェブアプリケーションに対して送信するのは
- OpenID の識別子のみとなります。その識別子は OpenID
- プロバイダにリダイレクトされ、そこでパスワードなどを用いて識別子の所有者情報を確認します。
- ここで入力したパスワードは、ウェブアプリケーション側には知られることはありません。
- </para>
- <para>
- OpenID の識別子は単なる <acronym>URI</acronym> で、
- 指し示す先のウェブページにはそのユーザに関する情報や特別なタグが含まれます。
- タグに記述されているのは、どのサーバに対してどの情報を送信するのかという情報です。
- OpenID についての詳細は
- <ulink url="http://www.openid.net/">OpenID の公式サイト</ulink>
- を参照ください。
- </para>
- <para>
- <classname>Zend_Auth_Adapter_OpenId</classname> クラスは
- <classname>Zend_OpenId_Consumer</classname> コンポーネントのラッパーで、
- OpenID の認証プロトコルを実装しています。
- </para>
- <note>
- <para>
- <classname>Zend_OpenId</classname> は、<ulink url="http://php.net/gmp">GMP
- 拡張モジュール</ulink> が使用可能な場合はそれを使用します。
- <classname>Zend_Auth_Adapter_OpenId</classname> を使う場合は、
- <acronym>GMP</acronym> 拡張モジュールを有効にしておくとよりよいパフォーマンスが得られるでしょう。
- </para>
- </note>
- </sect2>
- <sect2 id="zend.auth.adapter.openid.specifics">
- <title>仕様</title>
- <para>
- 他の <classname>Zend_Auth</classname> アダプタ同様、<classname>Zend_Auth_Adapter_OpenId</classname>
- クラスは <classname>Zend_Auth_Adapter_Interface</classname> を実装しています。
- このインターフェイスで定義されているメソッドは
- <methodname>authenticate()</methodname> です。
- このメソッドは認証そのものを行います。
- このメソッドをコールする前にオブジェクトを準備しておく必要があります。
- 「準備」とは、OpenID の識別子を設定したりその他の
- <classname>Zend_OpenId</classname> 固有のオプションを設定したりということです。
- </para>
- <para>
- しかし、他の <classname>Zend_Auth</classname> アダプタとは異なり、
- このアダプタは認証処理を外部のサーバで行います。
- また認証は二段階の <acronym>HTTP</acronym> リクエストで行います。
- したがって、<methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
- を二度コールする必要があります。
- 一度目のコールでは、このメソッドは何も返さずに OpenID サーバにリダイレクトします。
- 認証が終わってリダイレクト先から戻ってきたら、もう一度
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
- をコールしてサーバから戻されたリクエストのシグネチャを検証し、
- 認証手続きを進めます。このときは、このメソッドは
- <classname>Zend_Auth_Result</classname> オブジェクトを返します。
- </para>
- <para>
- 次の例は、<classname>Zend_Auth_Adapter_OpenId</classname> の使用方法を示すものです。
- 先ほど説明したように、<methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname>
- が 2 回コールされています。一度目、つまり <acronym>HTML</acronym> フォームから送信されたときは
- <varname>$_POST['openid_action']</varname> が <emphasis>"login"</emphasis>
- となっており、二度目、つまり OpenID サーバから <acronym>HTTP</acronym> リダイレクトで戻ってきたときは
- <varname>$_GET['openid_mode']</varname> あるいは <code>$_POST['openid_mode']</code>
- が設定されています。
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- $status = "";
- $auth = Zend_Auth::getInstance();
- if ((isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "login" &&
- !empty($_POST['openid_identifier'])) ||
- isset($_GET['openid_mode']) ||
- isset($_POST['openid_mode'])) {
- $result = $auth->authenticate(
- new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
- if ($result->isValid()) {
- $status = "You are logged in as "
- . $auth->getIdentity()
- . "<br>\n";
- } else {
- $auth->clearIdentity();
- foreach ($result->getMessages() as $message) {
- $status .= "$message<br>\n";
- }
- }
- } else if ($auth->hasIdentity()) {
- if (isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "logout") {
- $auth->clearIdentity();
- } else {
- $status = "You are logged in as "
- . $auth->getIdentity()
- . "<br>\n";
- }
- }
- ?>
- <html><body>
- <?php echo htmlspecialchars($status);?>
- <form method="post"><fieldset>
- <legend>OpenID Login</legend>
- <input type="text" name="openid_identifier" value="">
- <input type="submit" name="openid_action" value="login">
- <input type="submit" name="openid_action" value="logout">
- </fieldset></form></body></html>
- */
- ]]></programlisting>
- <para>
- OpenID 認証手続きをカスタマイズして、
- OpenID サーバからリダイレクトで戻ってくる先を別のページ
- (そのウェブサイトの "ルート" ページなど) にすることもできます。
- この場合は、独自の
- <classname>Zend_OpenId_Consumer_Storage</classname> あるいは
- <classname>Zend_Controller_Response</classname> を使用します。
- また、Simple Registration Extension
- を使用して OpenID サーバからユーザ情報を取得することも可能です。
- これらについての詳細は
- <classname>Zend_OpenId_Consumer</classname> のマニュアルを参照ください。
- </para>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|