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

    <sect2 id="zend.openid.introduction.what">
        <title>OpenID とは?</title>
        <para>
            OpenID は、ユーザ中心のデジタル識別子用のプロトコル群のことです。
            これらのプロトコルによって、ID プロバイダを使用したオンライン ID
            を作成します。この ID は、OpenID がサポートする場所ならどこでも使用可能です。
            OpenID 対応のサイトでは、
            ユーザ名やパスワードといった旧来の認証情報を覚えておく必要がなくなるわけです。
            すべての OpenID 対応サイトで単一の OpenID による ID を使用することができます。
            この ID は、通常は URL となります。
            これはそのユーザの個人ページの URL かもしれませんし、
            blog などの他の情報を含むリソースの URL かもしれません。
            ユーザ名やパスワードの組み合わせをたくさん覚える必要はもうありません。
            ひとつの 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 プロバイダ URL そして OpenID プロトコルのバージョンです。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID コンシューマは、Diffie-Hellman
                    キーを使用してプロバイダとのオプションの関連を確立します。
                    その結果、両者が共通の "共用する秘密" を保持することになり、
                    これを用いてその後のメッセージの署名や検証を行います。
                </para>
            </listitem>
            <listitem>
                <para>
                    OpenID コンシューマは、ユーザエージェントを
                    OpenID 認証リクエストとともに
                    OpenID プロバイダの URL にリダイレクトします。
                </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:
-->
