0byt3m1n1
Path:
/
data
/
0
/
0
/
69
/
155
/
69155
/
user
/
70391
/
cgi-bin
/
movabletype
/
docs
/
[
Home
]
File: mtauth.html
<html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"></META> <title>Movable Typeのコメンター登録用認証サービスの作成</title> <link rel="stylesheet" href="doc-styles.css" type="text/css"> </head> <body> <h3>Movable Typeのコメンター登録用認証サービスの作成</h3> <a name="__index__"></a> <ul> <li><a href="#summary">サービスの概要</a></li> <li><a href="#the user experience">ユーザーがたどるステップ</a></li> <li><a href="#the user model">ユーザーのモデル</a></li> <li><a href="#configuring movable type">Movable Typeの設定</a></li> <li><a href="#parameters passed by the client">クライアントから渡されるパラメータ</a></li> <li><a href="#parameters for the authentication response">認証応答のパラメータ</a></li> <ul> <li><a href="#response parameters in version 1.1">バージョン1.1の応答パラメータ</a></li> <li><a href="#response parameters in version 1">バージョン1の応答パラメータ</a></li> </ul> <li><a href="#format of the dsa key">DSA鍵のフォーマット</a></li> <ul> <li><a href="#hidden email addresses">メールアドレスの保護</a></li> </ul> <li><a href="#encoding issues">エンコードの問題</a></li> <li><a href="#references">参照サイト</a></li> </ul> <hr size="1" color="#CCCCCC"> <p> <hr size="1" color="#CCCCCC"> <h1><a name="summary"></a>サービスの概要</h1> <p>Movable Type 3.0は、コメント管理において新しい機能群を提供しています。そのひとつに、外部のシステム経由で、ユーザーを認証するインタフェースがあります。 シックス・アパートの所有するTypeKeyシステムは、認証システムの一例ですが、他の認証システムをMovable Typeのために作ることも可能です。</p> <p>このドキュメントは、TypeKeyの代わりになるカスタムの認証サービスを開発する場合に使うインタフェースを規定しています。</p> <p>システムの核となる部分は、DSA(Digital Signature Algorithm [1]、デジタル署名アルゴリズム)とSHA1(Secure Hash Algorithm、セキュア・ハッシュ・アルゴリズム)関数から成ります。 認証サービスは秘密鍵を持ち、インストールしたMovable Typeはそれに対応した公開鍵を持ちます。 認証サービスは、1人のユーザーを認証すると、そのユーザーのプロファイル情報とその情報のデジタル署名を、インストールしたMovable Typeに送ります。 Movable Typeは公開鍵を使って、その署名を確認し、それが正しい場合はブラウザのCookieを、再び同じユーザーを確認できるようにセットします。</p> <p>代替の認証サービスを作成するには、下記の呼び出しの規則に従ったHTTPハンドラ群が必要となります。 代替の認証サービスを使うには、「Movable Typeの設定」のセクションにあるMovable Typeのパラメータを設定する必要があります。</p> <p> <hr size="1" color="#CCCCCC"> <h1><a name="the user experience"></a>ユーザーがたどるステップ</h1> <p>通常、ユーザーはMovable Type (MT)のコメント・ページから開始します。</p> <p>未定</p> <p>MTコメント・ページ -> 認証のためのログイン -> 認証のための登録 -> MTコメント・ページ -> 認証サービスからのログアウト -> MTコメント・ページ</p> <p> <hr size="1" color="#CCCCCC"> <h1><a name="the user model"></a>ユーザーのモデル</h1> <p>認証サービスは、<a href="#item_name"><code>name</code></a>という固有のキーで同定される複数のユーザーのデータを保管しています。 nameは、50半角文字以下のテキストから成り、ASCIIでエンコードされ、文字セット[A-Za-z0-9_]を使っています。 認証サービスはまた、各ユーザーについて、以下のフィールドの情報を保管します。</p> <ul> <li><strong><a name="item_nick"></a>nick</strong><br>人間が読めるユーザーの名前。 HTMLでエンコードされ、Unicodeの文字セットから成る文字列にしてください。 <p></p></ul> <p> <hr size="1" color="#CCCCCC"> <h1><a name="configuring movable type"></a>Movable Typeの設定</h1> <p>外部の認証システムは、以下に記載するいくつかのmt.cfgの設定オプション使って、Movable Typeのインタフェースにアクセスします。</p> <ul> <li><strong><a name="item_SignOnURL"></a>SignOnURL</strong><br>これは、ユーザーが認証サービスにサインオンするウェブ・インタフェースの基本的なURLです。 このリンクがコメント・ページに表示され、そこからユーザーはサインオンできます。 <p>Movable Typeは、CGIパラメータの<code>_return</code>を加えます。このパラメータの値は、ログインが完了したときに戻るURLです。 <code>_return</code>パラメータは、認証サービスによって渡されたDSA署名[2]を復元(デコード)するMovable Typeのハンドラを指します。 認証サービスが渡すべき引数は、下記の「<a href="#parameters for the authentication response">認証応答のパラメータ</a>」を参照してください。</p> <p></p> <li><strong><a name="item_SignOffURL"></a>SignOffURL</strong><br>これは、ユーザーがコメント・ページの<code>logout</code>リンクをクリックするときに、ユーザーのブラウザがアクセスするURLです。 認証サービスは、ユーザーのブラウザをログアウトの状態にリセットして、<code>_return</code>パラメータ値にアクセスするため、必要なことを行います。 <p></p> <li><strong><a name="item_RegKeyURL"></a>RegKeyURL</strong><br>通常、Movable Typeが署名を確認するのに使う公開鍵は、このURLからHTTPにロードされます。 こうしておくと、認証サービスの管理者は、必要に応じて、鍵のペアを、エンドユーザー側にインストールされたMovable Typeにアクセスせずに、更新できます。 このURLへのGETリクエストは、応答の本文に鍵を返し、鍵は簡単なフォーマットでシリアライズ(保存・送受信できる形式に)されます。このフォーマットに関しては、下記の「DSA鍵のフォーマット」をご覧ください。 <p>URLからロードされた値は、Movable Typeで24時間キャッシュされます。</p> <p></p> <li><strong><a name="item_SignOnPublicKey"></a>SignOnPublicKey</strong><br> 'RegKeyURL'の代わりとして、DSA公開鍵をこの設定値に直接、供給することができます。 このパラメータについては、「DSA鍵のフォーマット」をご覧ください。 <p></p> <li><strong><a name="item_IdentityURL"></a>IdentityURL</strong><br> これは、1人のユーザーの「プロファイル・ページ」を指す基本的なURLです。 完全なURLは以下のような形式を取ります。 <pre><IdentityURL>/<username> </pre><p>この<username>とはそのユーザーの固有の鍵で、認証サービスから供給された<a href="#item_name"><code>name</code></a>パラメータから来ています(下記の「<a href="#parameters for the authentication response">認証応答のパラメータ</a>」を参照してください)。</p> <p></p></ul> <p> <hr size="1" color="#CCCCCC"> <h1><a name="parameters passed by the client"></a>クライアントから渡されるパラメータ</h1> <p>認証サービスにユーザー・リンクを作成すると、Movable Typeは<code>v</code>という名前のCGIパラメータを含むようになります。このパラメータは、認証サービスが使うプロトコルのバージョンを指定します。 このパラメータがない場合は、1がセットされます。</p> <p>かなり古いバージョンのTypeKeyプロトコルのリクエストがあった場合、認証サービスがそのサポートを拒否することはできますが、現在も使用されているMovable Typeの以前のバージョンでその認証サービスを使えなくなる可能性があります。</p> <p> <hr size="1" color="#CCCCCC"> <h1><a name="parameters for the authentication response"></a>認証応答のパラメータ</h1> <p>認証サービスは、ユーザーを認証すると、ブラウザを、CGIパラメータが追加された<code>_return</code>アドレスにリダイレクトします。 それらのCGIパラメータは、クライアントからの<code>v</code>というCGIパラメータが含むプロトコルのバージョンによって区別されます。<code>v</code>がない場合は、1の値が使われます。</p> <p> <h2><a name="response parameters in version 1.1"></a>バージョン1.1の応答パラメータ</h2> <ul> <li><strong><a name="item_email"></a>email</strong><br>これはユーザーのメールアドレス、またはそのアドレスの一意のIDです。 メールアドレスをクライアント・アプリケーションに表示するかどうかは、認証システム側が決定します。 このフィールドが文字列``mailto:<email>''のSHA1ハッシュ[3]である場合、Movable Typeのウェブログ所有者は、<email>の値を使って、そのハッシュと合うユーザーを検索することができます。 <p></p> <li><strong><a name="item_name"></a>name</strong><br>このフィールドはユーザーの固有なログイン名を表示します。 ログイン名は、認証サービスの範囲内で固有な値にする必要があります。 このログイン名は単に固有なプロファイル・ページへのリンクを作成するためだけに使います。 それ以外の目的では通常、ウェブサイトのどこにも表示されません。ただし、Movable Typeのテンプレート作成者が別の目的で使う可能性はあります。 <p></p> <li><strong>nick</strong><br>このフィールドが提供するのは、ユーザーの表示名(ニックネーム)です。この表示名とは、ユーザーがパブリックに使いたい名前を意味します。 これは固有でなくても構いません。 また、これはMovable Typeのウェブログに表示されます。 <p></p> <li><strong><a name="item_ts"></a>ts</strong><br>これは署名が生成されたときのタイプスタンプで、1970年1月1日 00:00:00(UTC)からの秒数で表示されます Movable Typeは、タイムスタンプがMovable Typeによるローカル時刻の「n」秒内に生成されたことを確認します。この「n」秒は、あまり大きな値ではありません。 これは、Movable Typeのサイトが、ntpなどを使って認証サービスと時刻が同期されている必要性を示しています。 <p></p> <li><strong><a name="item_sig"></a>sig</strong><br> この値は、Movable Typeが、上記のパラメータが信頼あるサービスから提供されたことを確認するために使う署名です。 この署名は、DSAアルゴリズムによって処理されます。DSAアルゴリズムは、<i>r</i>と<i>s</i>の2つの部分から成る値を生成します。 <a href="#item_sig"><code>sig</code></a>パラメータの値は、base64方式[4]の<i>r</i>と<i>s</i>をコロンでつないだ表示形式を取ります。 <pre><r-base64>:<s-base64> </pre><p>認証サービスによって署名される「メッセージ」は、数個の値をコロン2つでつないだ文字列から成ります。</p> <pre><email>::<name>::<nick>::<ts>::<site token> </pre><p>これらの値のすべては、上記のような形式で応答のcleartextにも与えられます。ただし、クライアントによって渡されたサイト・トークンは省かれます。 たとえば、ログインするユーザーが``Napoleon Bonaparte'' <<a href="mailto:napoleon@france.fr">napoleon@france.fr</a>>で、'napster'というログイン名を持ち、2001-09-08 19:00:00 (エポックから1000000800秒後)にログインした場合、「sig」は以下の文字列の署名になります。</p> <pre>napoleon@france.fr::Napolon Bonaparte::napster::1000000800::6jTGQ2MF1focBR5vODfC </pre><p></p></ul> <p> <h2><a name="response parameters in version 1"></a>バージョン1の応答パラメータ</h2> <p>バージョン1のプロトコルは、サイト・トークンが応答署名に含まれないところを除いては、バージョン1.1とまったく同じです。 したがって、DSAアルゴリズムに渡される値は、以下のようになります。</p> <pre> <email>::<name>::<nick>::<ts> </pre><p> <hr size="1" color="#CCCCCC"> <h1><a name="format of the dsa key"></a>DSA鍵のフォーマット</h1> <p>DASの公開鍵は、p、q、g、およびpub_keyの4つのフィールドから成ります。 Movable Typeは、DSA鍵を検索するとき、10進法の数字から成る4つの各フィールドが1つのスペースで区切られ1行につらなっている値を探します。 各フィールドは、フィールド名と'='で始まります。 以下に例を挙げます。</p> <pre>p=11671236708387678327224206536086899180337891539414163231548040398520841845883184000627860280911468857014406210406182985401875818712804278750455023001090753 g=8390523802553664927497849579280285206671739131891639945934584937465879937204060160958306281843225586442674344146773393578506632957361175802992793531760152 q=1096416736263180470838402356096058638299098593011 pub_key=10172504425160158571454141863297493878195176114077274329624884017831109225358009830193460871698707783589128269392033962133593624636454152482919340057145639 </pre><p> <h2><a name="hidden email addresses"></a>メールアドレスの保護</h2> <p>Movable Type 3では、認証サービスで、投稿者のIDを提供しながら、かつ、その投稿者のメールアドレスを保護する機能が可能になりました。 この機能をオンにすると、認証サービスはメールアドレスをMovable Typeに渡さず、その代わりに、メールアドレスに基づき一方向性のハッシュ関数によって処理された値を渡します。</p> <p>例を挙げてみましょう。 あなたは、ある投稿者(Luke)のメールアドレスを渡さない認証システムを使っているとします。 あるとき、あなたが知らないコメント投稿者があなたのサイトに来て、”Luke Skywalker”という名前を使いました。 あなたはそのコメントを読み、それがトピックに関連していたので、彼をコメント投稿者として承認したとします。 しばらくして、あなたは、別のコメントを受け取りました。その内容は、悪意に満ち、トピックにも外れていました。そしてLuke Skywalkerという名前がコメント投稿者に使われていました。 これは前のコメント投稿者と同じ人なのでしょうか? それを調べるために、あなたはMovable Typeの「コメント」画面に行き、最近の"Luke Skywalker”によるコメントを検索します。 特定のユーザーのコメントをすべて検索するには、そのユーザーの名前の隣にある虫めがねアイコンをクリックします。 彼が時には異なる名前を使っていたとしても、そのアカウントから投稿されたコメントは、この検索の結果、すべて表示されます。</p> <p>さて、別の一例です。あるとき、Groverという人があなたのサイトに投稿しました。そして、あなたはこの人があなたの友達(<a href="mailto:grover@sesamestreet.com.">grover@sesamestreet.com</a>)かどうか知りたいとします。 この場合は、コメント画面の検索ボックスにそのメールアドレスを入力すると、メールアドレスが保護され隠されていても、そのメールアドレスの持ち主のコメントを検索することができます。</p> <p>これは魔法のように聞こえますが、可能なことです。一方向性の数学的な「ハッシュ」関数がメールアドレスを隠すと同時に、メールアドレスを検索可能にしてくれるからです。</p> <p>この機能がオンになっていると、渡される値は、FOAF(Friend of a Friend)ファイルで使われる値と同一です。したがって、コメント投稿者が、FOAFファイルによって同定される人と同じであるかどうか、判定できます。</p> <p>特に、ハッシュになったメールアドレスは、メールアドレスの前に<code>mailto:</code>を追加して、結果をハッシュすることで、形成されます。</p> <p> <hr size="1" color="#CCCCCC"> <h1><a name="encoding issues"></a>エンコードの問題</h1> <p>認証サービスに保管された<a href="#item_nick"><code>nick</code></a>フィールドは、HTMLのページでMovable Typeによって表示されます。そして、非常に大きな文字セットからのエンコード文字を含むことがあります。 ターゲットのページ(通常はウェブログ)で、認証サービスが認識できない様々なエンコードを使っている可能性があるため、<a href="#item_nick"><code>nick</code></a>フィールドをHTMLエンティティでエンコードするのが最も安全な方策です。</p> <p>認証応答の<a href="#item_nick"><code>nick</code></a>CGIパラメータは、署名をコンピュータ処理するときに使う値と、1バイト1バイト同一である必要があります。 クエリー文字列のURLデコーディングを除き、Movable Typeは署名を確認するときにどんな再復元(リコーディング)も行いません。</p> <p>だだし、<a href="#item_nick"><code>nick</code></a>の値は、US-ASCII文字セットに制約されません。そして認証サービスは必要な場合、特定のエンコーディングを自由に利用できます。</p> <p>(訳注: 現在、シックス・アパートが提供している TypeKey では、UTF-8 を利用していて、Movable Type 3.1 日本語版では、UTF-8 の利用を前提としています。) <p> <hr size="1" color="#CCCCCC"> <h1><a name="references"></a>参照サイト(英語)</h1> <DL> <li><strong><a name="item_%5B1%5D_Digital_Signature_Algorithm%2C_%3Chttp%3A%"></a>[1] Digital Signature Algorithm, <http://www.itl.nist.gov/fipspubs/fip180-1.htm></strong><br> <DD> <li><strong><a name="item_%5B2%5D_FIPS_PUB_186%2C_Digital_Signature_Standard"></a>[2] FIPS PUB 186, Digital Signature Standard, <http://www.itl.nist.gov/fipspubs/fip186.htm></strong><br> <DD> <li><strong><a name="item_%5B3%5D_FIPS_PUB_180%2D1%2C_Secure_Hash_Standard%2"></a>[3] FIPS PUB 180-1, Secure Hash Standard, <http://www.itl.nist.gov/fipspubs/fip180-1.htm></strong><br> <DD> <li><strong><a name="item_Extensions"></a>[4] RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies (Section 6.8. describes Base64), <http://www.faqs.org/rfcs/rfc2045.html></strong><br> <DD> <li><strong><a name="item_%5B5%5D_Friend_of_a_Friend_project%2C_%3Chttp%3A%2"></a>[5] Friend of a Friend project, <http://www.foaf-project.org/></strong><br> <DD> </DL> <hr size="1" color="#CCCCCC"> <span class="copyright">Copyright (c) 2001-2004 Six Apart. All Rights Reserved.</span> </body> </html>