前へ 目次 索引 次へ | |
iPlanet Messenger Express 5.0 カスタマイズ ガイド | |
第 5 章 Messenger Express サービスに対する認証の管理
この章では、iPlanet Messenger Express 5.0 を使用した別の認証機構を統合する方法について説明します。
認証の概要
Messenger Express 5.0 を使用しているサイトの中には、ユーザを認証するための代替メソッドを提供しているものがあります。このようなサイトには、ある種のポータル サービスがあり、ユーザが最初に一度だけログイン情報を入力すると、そのユーザは再び認証を行わなくても様々なサービスを利用することができます。この場合、Messenger Express 5.0 のログイン機構は、他のサービスによって既に認証が行われたことを判断し、その認証元から提供された証明書に基づいてユーザを認識します。一般に、これは「プロキシ認証」と呼ばれます。ほとんどの場合、ユーザは Web ページで自分のユーザ名とパスワードを入力してサイトに入ることができます。たとえば、Messenger Express は、ユーザがそのサイトからアクセスできるサービスの 1 つです。ユーザが Messenger Express を開くためのリンクをクリックしても、ユーザ名やパスワードの入力を求めるメッセージは表示されません。これは、このサービスが、サイトへのログイン時に入力したユーザ名とパスワードを参照しているためです。
Messenger Express の認証 SDK (Software Development Kit) には、以下の 3 つのコンポーネントがあります。本章で説明しているような認証方法を受け入れるためには、これらのコンポーネントに変更を加える必要があります。
SDK に含まれているファイル
認証 SDK を既存のコードに組み込むには、まず、DLL/共有オブジェクトへのリンクおよび呼び出しコードに expapi.h ヘッダー ファイルを含めます。プラットフォームによっては、他のシステム ライブラリへのリンクが必要になる場合もあります。表 5-1 に、サーバ-ルート/bin/msg/authsdk (インストール パッケージ) の内容を示します。
SDK 設定の初期化
以下の関数は、他の関数を呼び出す際に必要な SDK 設定情報を初期化するためのものです。int EXP_Init(
char *pszLdapHost,
char *pszLdapMatchAttrib,
char *pszLdapDN,
unsigned int iLdapPort,
char *pszLdapBindUser,
char *pszLdapBindPass,
char *pszAdminUser,
char *pszAdminPassword);pszLdapHost は、ユーザを検索する LDAP サーバのホスト名または IP アドレスを含む NULL で終わっている文字列です。
pszLdapMatchAttrib は、LDAP 検索を行う際に、pszAdminUser パラメータの照合対象となる LDAP 属性を指定する NULL で終わっている文字列です。デフォルトは、ユーザ ID (uid) です。
pszLdapDN は、ユーザを検索するときに使う DN を指定する NULL で終わっている終了文字列です。
iLdapPort は、LDAP サーバがリッスンしているポート番号を指定する整数です。
pszLdapBindUser および pszLdapBindPass は、Directory Server のバインド DN とパスワードを指定する文字列です。この文字列が NULL の場合、SDK は anonymous ユーザとしてバインドしようとします。
pszAdminUser および pszAdminPass は、Messaging Server に接続するときに使用する「プロキシ」ユーザ名とパスワードを含んだ文字列へのポインタです。これらが NULL になることはありません。
無事に初期化が行われると 0 が返され、初期化に失敗した場合はゼロ以外の数値が返されます。エラーが発生した場合は、問題の内容に応じて (ほとんどの場合はシステムの呼び出し) 適切な値が errno にセットされます。その後、これらのコードが標準の errno 値にマッピングされます。
SDK 検索
以下の関数は、特定のユーザとクライアントの IP アドレスに対するセッション ハンドルを生成するために使用されます。int EXP_GenerateLoginURL(
char *pszUser,
char *pszClientAddress,
char *pszMailHost,
char *pszURL)pszUser は、ユーザ ID (uid) を含む NULL で終わっている文字列です。
pszClientAddress は、クライアントの IP アドレスを表す文字列です。
pszMailHost は、ユーザのメール サーバのホスト名または IP アドレスを含む NULL で終わっている文字列です。このパラメータが NULL の場合は、このホストを決定するために (EXP_init() からの) LDAP サーバが検索されます。それ以外の場合は、指定されたメール ホストが使用されます。
4 番目のパラメータ pszURL は、この関数が URL を返すために呼び出し元によって割り当てられるバッファへのポインタです。この URL は 2048 バイト以下でなければなりません (終端 NULL を含む)。
この関数は、成功した場合に 0 を返し、失敗した場合にゼロ以外の数値を返します。失敗した場合には、もう一度 errno が適切な値に設定されます。
この関数によって返される文字列は、Messenger Express への接続時に使用されるログイン URL です。認証アプリケーション (ログイン CGI など) は、ローカルの認証条件に基づいてユーザを認証した後に、これらの関数を呼び出します。典型的な CGI の場合は、返される文字列を使って、URL を形成したり、HTTP ヘッダーや JavaScript を介してクライアント上に cookie を設定します。
SDK クリーンアップ
以下の関数は、SDK によって使われているリソースをシャット ダウンしてクリーンアップするために呼び出されます。一般に、簡単な CGI ではこの関数を呼び出す必要はありませんが、API を使用しているプラグインではリソースを回復して実行を続行したい場合があります。
この関数は、初期化に成功すると 0 を返し、失敗した場合はゼロ以外の数値を返します。また、errno は、エラーの内容に基づいて最も適切な値に設定されます。これらのコードも標準の errno 値にマッピングされます。
次の関数は、使用している SDK のバージョン番号を示す NULL で終わっている文字列への const ポインタを返します。
この値は、他のものに関連付けて使用することはできません。つまり、この文字列を特定のフォーマットで取り込んだり、この文字に特定の値を含めたりするようなコードを書くことはできません。この文字列は、使用しているバージョンを示す目的でのみ使用します。
バージョン番号に関する情報がない場合には、NULL が返されます。
Messenger Express サービスに接続してセッションを生成するときに、非標準のポートを使用するよう SDK に指示するには、次の関数を使用します。
特に設定を変更しない限り、SDK は標準の HTTP ポート (80) を使用します。この関数はスレッドセーフではなく、グローバルな値を設定します。スレッド環境でこの関数を使用する場合は、この関数の周りと EXP_GenerateLoginURL 関数をロックする必要があります。
使用例
プロキシ認証 API をテストするには、まず cgiauth.c ファイルを開きます。そして、ファイルの冒頭部分のいくつかの #define ステートメントを設定用に編集します。#define HTML_SOURCE_FILE "login.html"
#define BUFFER_SIZE 1024
#define MAIL_SERVER "mail.yourdomain.com"
#define DIRECTORY_SERVER "directory.yourdomain.com"
#define DN "o=yourdomain.com"
#define ADMINNAME "admin"
#define ADMINPASS "admin"MAIL_SERVER、DIRECTORY_SERVER、DN、ADMINNAME、および ADMINPASS の値を使用しているシステム構成に合わせて変更します。たとえば、メール サーバが mail.mcom.com、Directory Server が ldap.mcom.com、管理ユーザ名およびパスワードが sysadmin であるとすると、これらの行は以下のようになります。
#define HTML_SOURCE_FILE "login.html"
#define BUFFER_SIZE 1024
#define MAIL_SERVER "mail.mcom.com"
#define DIRECTORY_SERVER "ldap.mcom.com"
#define DN "o=mcom.com"
#define ADMINNAME "sysadmin"
#define ADMINPASS "sysadmin"この後、 cgiauth.c ファイルを実行可能の CGI ファイル内にコンパイルします。そして、コンパイルした CGI ファイルを実行できるように HTTP サーバを設定します。Web ブラウザ内で CGI スクリプトを実行すると、どこかに問題がない限り login.html ファイルに基づく簡単なログイン画面が表示されます。そこに有効なユーザ名とパスワードを入力すると、Messenger Express に対するユーザ認証を行わずに Messenger Express セッションを開始することができます。
これは、プロキシ認証の使い方の一例にすぎません。この例を参考にして、各自の環境での SDK の使い方を検討してください。
前へ 目次 索引 次へ
Copyright (c) 2000 Sun Microsystems, Inc. 既存部分の一部: Copyright (c) 2000 Netscape Communications Corp. All rights reserved.
最終更新日 2000 年 9 月 14 日