この文書は、BugTrack/98 をリネームして、再構成しています。

TypeKey を利用した認証について

設定

TypeKey ID の取得

以下の URL にアクセスし、必要事項を入力の上、確認通知がメールで届くので、 そのメールに従ってアクセスすれば、登録が完了となる。

自サイトで TypeKeyトークンが利用できるようにする

以下の URL にアクセスし、TypeKey にログインする。

すると画面下部に、以下のような箇所がある。

typekey_setup.jpg

  • 自サイトの登録
    2の欄に、自サイトの URL を、最大5つまで登録ができる。 自分のTypeKey ID で5つまで、自サイトが持てるということになる。
    例えば、http://localhost/http://localhost/plus/ がある場合、 http://localhost/ を登録すれば、下位ディレクトリも同一のTypeKeyトークンの 利用ができるようです。TypeKeyトークンを制限したいようなことが無い場合には、 上位ディレクトリを指定しておけば、1つの登録で済みます。
    下位ディレクトリ毎に管理者を分けるような運用の場合は、逆に下位ディレクトリまで 指定して管理することになると思います。
  • auth_api.ini.php (旧: auth.ini.php)
    /////////////////////////////////////////////////
    // Auth API
    $auth_api = array(
            // TypeKey
            'typekey'               => array(
                    'use'           => 0,
                    'site_token'    => 'xxxxxxxxxxxxx',
                    'need_email'    => 0,
            ),
    );
use

TypeKey 認証の機能を有効にする場合には、1 を設定する。 省略値は、0(ゼロ)で機能が無効になっています。
site_token

1で表示されている文字列を転記する。
need_email

認証時に、電子メールの情報を必要とするかどうか。指定もできるが、まだ利用の目処はたっていない。電子メールの情報を送信して欲しい場合は、1 を指定する。 この場合、相手が電子メールの情報を送信してくれない場合は、Plus! サイト上、認証されない。

利用にあたっての前提環境

  • セッションを有効にする
pukiwiki.ini.php

// PLUS_ALLOW_SESSION - Allow / Prohibit using Session
define('PLUS_ALLOW_SESSION', 1);
  • 必要なPHPエクステンション
    以下のPHPエクステンションが有効でないと、DSAによる署名の検証ができないので、稼動しません。管理権限でログインすれば、phpinfo プラグインを利用することで確認ができます。以下のような箇所のいずれかが見つかれば利用可能です。
    • gmp
    • bcmath
      php_ext.jpg

TypeKey による認証利用

typekey プラグインにより、TypeKey による認証が行えます*1

#typekey

として、SideBar などに組み込み利用ください。


技術的な整理

以下からは、TypeKey 認証を利用した 実装を行う上での仕方など、内容を整理しておくために残しています。

API

TypeKey API については、 このページに詳細が書かれています。

署名の検証

署名を検証するためには、DSA という 署名用のアルゴリズムを実装する必要があります。

DSA.php

このソースの場合は、PHP5 でしか稼動しないため、PHP4 でも稼動するように、 一部、ソースを改修して利用することになると思います。

  • 修正BSDライセンス
  • 必要なPHPエクステンション
    • gmp
    • bcmath
      Fedora Core 6 の場合は、php-bcmath-5.1.6-3.1.fc6 が最新(2006-11-19 現在)。

実装

認証管理

サイトにおいて、TypeKey によって認証を受けたことを管理するのは、 そのサイトの責任において行う必要がある。セッション管理を有効にし、 認証済ステータスを管理するような処理を行う。

  • 認証情報に、メールアドレスなどが含まれる場合もあるため、共通鍵で暗号化して利用するような実装を施しておく。
    • JavaScriptでの実装および、PHPでの実装があり、クライアント・サーバで共通して利用できる*2ことから、DES による実装を採用する予定。
    • Paul Tero氏には、ソースの再配布について確認し問題無しとの返事を頂戴しています。純粋なGPLでも、BSDライセンスでもなく、単なるOSSのようなので、Plus! でのライセンス上、微妙なところ。
    • DESのコード

役割

TypeKey で認証を受けたユーザも、サイト内では見做し認証者という位置付けとして 判定できるようにする。

書き込み制御

せっかく認証を受けても、WikiWiki という特性上、誰でも書き込める状態となるため、 PKWK_READONLY の状態で、TypeKey による認証を有効にした場合に限り、comment や pcomment プラグインなどでの書き込みが可能なような制御を行う。 この場合でも、ユーザ名などの変更ができないような制御を行う。



*1 暫定版となっています。継続的に存在するかは分かりません。
*2 AES(Rijndael)、blowfishなど、共通鍵としての実装はあるものの、JavaScriptおおよび、PHPでの実装があり、共通して利用できることから採用したいと思います。色々と調べましたが、どうも、一致しないものばかりで。

Attach file: filephp_ext.jpg 377 download [Information] filetypekey_setup.jpg 433 download [Information]

Reload   New Lower page making Unfreeze Diff Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Fri, 28 Dec 2007 17:23:30 HADT (982d)