<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24249 -->
<sect1 id="zend.openid.introduction">
    <title>導入</title>
    <para>
        <classname>Zend_OpenId</classname> は、OpenID 対応のサイトや
        ID プロバイダを作成するためのシンプルな <acronym>API</acronym>
        を提供する Zend Framework のコンポーネントです。
    </para>

    <sect2 id="zend.openid.introduction.what">
        <title>OpenID とは?</title>
        <para>
            OpenID は、ユーザ中心のデジタル識別子用のプロトコル群のことです。
            これらのプロトコルによって、ID プロバイダを使用したオンライン ID
            を作成します。この ID は、OpenID がサポートする場所ならどこでも使用可能です。
            OpenID 対応のサイトでは、
            ユーザ名やパスワードといった旧来の認証情報を覚えておく必要がなくなるわけです。
            すべての OpenID 対応サイトで単一の OpenID による ID を使用できます。
            この ID は、通常は <acronym>URL</acronym> となります。
            これはそのユーザの個人ページの <acronym>URL</acronym> かもしれませんし、
            blog などの他の情報を含むリソースの <acronym>URL</acronym> かもしれません。
            ユーザ名やパスワードの組み合わせをたくさん覚える必要はもうありません。
            ひとつの ID ですべてのインターネットサービスが使用できるのです。
            OpenID はオープンで、中央管理されておらずフリーなユーザ中心のソリューションです。
            各自がどの OpenID プロバイダを使用するかを選択できますし、
            独自の ID サーバを作成することもできます。
            OpenID 対応のサイトや ID プロバイダを作成する際に、
            どこかの許可を得る必要はありません。
        </para>

        <para>
            OpenID についての詳細な情報は
            <ulink url="http://www.openid.net/">OpenID の公式サイト</ulink>
            を参照ください。
        </para>
    </sect2>

    <sect2 id="zend.openid.introduction.how">
        <title>動作原理は?</title>
        <para>
            <classname>Zend_OpenId</classname> コンポーネントの主要な目的は、
            次の図のような OpenID 認証プロトコルを実装することです。
        </para>

        <para>
            <inlinegraphic align="center" fileref="figures/zend.openid.protocol.jpg" format="JPEG" scale="100" valign="middle" width="559" />
        </para>

        <orderedlist>
            <listitem>
                <para>
                    認証処理はエンドユーザ側から始まります。
                    まず OpenID 識別子をユーザエージェント経由で
                    OpenID コンシューマに渡します。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID コンシューマはユーザから受け取った識別子を正規化し、
                    その内容を確認します。確認した結果として得られるのは、
                    識別子、OpenID プロバイダ <acronym>URL</acronym> そして OpenID プロトコルのバージョンです。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID コンシューマは、Diffie-Hellman
                    キーを使用してプロバイダとのオプションの関連を確立します。
                    その結果、両者が共通の "共用する秘密" を保持することになり、
                    これを用いてその後のメッセージの署名や検証を行います。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID コンシューマは、ユーザエージェントを
                    OpenID 認証リクエストとともに
                    OpenID プロバイダの <acronym>URL</acronym> にリダイレクトします。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID プロバイダはユーザエージェントが認証済みかどうかを確認し、
                    必要に応じて認証処理を行います。
                </para>
            </listitem>
            <listitem>
                <para>
                    エンドユーザは所定のパスワードを入力します。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID プロバイダは、指定されたコンシューマでその
                    ID が許可されているかどうかを調べ、必要に応じてユーザに問い合わせます。
                </para>
            </listitem>
            <listitem>
                <para>
                    エンドユーザは、その ID を渡してもよいかどうかを指定します。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID プロバイダはユーザエージェントを
                    OpenID コンシューマにリダイレクトします。その際のリクエストには
                    "認証に通った" あるいは "失敗した" といった情報が含まれます。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID コンシューマはプロバイダから受け取った情報を検証します。
                    この検証には、ステップ 3 で取得した "共用する秘密"
                    を用いるか、あるいは OpenID プロバイダにさらに直接リクエストを行います。
                </para>
            </listitem>
        </orderedlist>
    </sect2>

    <sect2 id="zend.openid.introduction.structure">
        <title>Zend_OpenId の構造</title>
        <para>
            <classname>Zend_OpenId</classname> は 2 つのサブパッケージで構成されています。
            まず最初が <classname>Zend_OpenId_Consumer</classname> で、これは
            OpenID 対応のサイトを開発するためのものです。もうひとつは
            <classname>Zend_OpenId_Provider</classname> で、これは OpenID
            サーバを開発するためのものです。これらはお互いに完全に独立しており、
            それぞれ個別に使用できます。
        </para>

        <para>
            これらのサブパッケージの唯一の共通部分は、
            <classname>Zend_OpenId_Extension_Sreg</classname> が実装している
            OpenID Simple Registration Extension と
            <classname>Zend_OpenId</classname> クラスのユーティリティ関数群です。
        </para>

        <note>
            <para>
                <classname>Zend_OpenId</classname> は、<ulink url="http://php.net/gmp">GMP
                拡張モジュール</ulink> が使用可能な場合はそれを使用します。
                <classname>Zend_OpenId</classname> を使う場合は、
                GMP 拡張モジュールを有効にしておくとよりよいパフォーマンスが得られるでしょう。
            </para>
        </note>
    </sect2>

    <sect2 id="zend.openid.introduction.standards">
        <title>サポートする OpenID 標準規格</title>
        <para>
            <classname>Zend_OpenId</classname> コンポーネントは、
            次の標準規格に対応しています。
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    OpenID Authentication protocol version 1.1
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID Authentication protocol version 2.0 draft 11
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID Simple Registration Extension version 1.0
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID Simple Registration Extension version 1.1 draft 1
                </para>
            </listitem>
        </itemizedlist>
    </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
