wiki:pne-book-7
 ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Version 4 (modified by tejimaa, 12 years ago) (diff)

--

TOC

第7章 外部連携

外部アプリとの連携でOpenPNEはここまで良くなる

MasterPNE

MasterPNEとは、OpenPNEのユーザーアカウントを親(Master)として、外部のアプリケーションを連携させる方法です。
MasterPNEに対応するには、OpenPNE本体ではなく、外部システム側がMasterPNEの提供する認証機構をサポートしている必要があります。
ですので、今後OpenPNEでは、より多くの外部システムと連動するため、複数の認証プロトコルをサポートしていく予定です。

OpenPNE X TRAC

OpenPNE × Trac (前提条件)OpenPNE、TRAC(dagのyumインストール)のインストール

1.mod_auth_mysqlの導入
2.httpd.confの修正
3.動作確認

1.mod_auth_mysqlの導入
mod_auth_mysqlはApacheの通常のファイルベースのベーシック認証をMySQLベースに置き換える仕組みです。
インストール

yum install mod_auth_mysql

※RedhatEL(CentOS)には標準で搭載されています。

2.httpd.confの修正

 <Location /trac/>
 AuthName "OpenPNE"
 AuthType Basic
 AuthMySQLEnable on
 AuthMySQLUser *****
 AuthMySQLPassword **********
 AuthMySQLDB sns_openpne_jp
 AuthMySQLNameField nickname
 AuthMySQLPasswordField hashed_password
 AuthMySQLUserTable "c_member, c_member_secure"
 AuthMySQLUserCondition "c_member.c_member_id=c_member_secure.c_member_id"
 AuthMySQLPwEncryption md5
 Require valid-user
</Location>

※「AuthMySQLNameField」でID用のフィールドを、「AuthMySQLPasswordField」でパスワード用のフィールドを特定しています。

Apacheを再起動して設定を有効にします。

# /usr/local/apache/bin/apachectl restart

3.ログイン 通常通り、SNSのユーザー登録します。
次に、TRAC(認証サイト)に移動しSNSのニックネームとパスワードでログインします。

SlavePNE

SlavePNEとは、他のシステムのアカウントを親、OpenPNEを子(Slave)として連携させる方法です。

XOOPS X OpenPNE

OpenPNEの外部認証としてXOOPSを利用する

手順
(前提条件)
XOOPS、OpenPNEのインストール

1.OpenPNEのconfig.php内のIS_SLAVEPNE、オプションを設定
2.OpenPNEのconfig.php内のsession_save_pathを設定
3.XOOPSのユーザIDとパスワードでOpenPNEにログインする

1.OpenPNEのconfig.php内のIS_SLAVEPNE、オプションを設定
IS_SLAVEPNEをtrueにする。
オプションの設定をする。
username,password,hostspec,databaseはxoopsのDB設定と同一にする。
xoopsのDBを参照し、table,usernamecol,passwordcolを設定。
最後に、cryptTypeをmd5に設定。(XOOPSはmd5を使用しているため)
これでひとまず、XOOPSのユーザIDとパスワードでOpenPNEにログインすることができます。

// 外部認証を使用するかどうか
define('IS_SLAVEPNE' , true);

// IS_SLAVEPNEがtrueの場合のauthオプション
$GLOBALS['_OPENPNE_AUTH_CONFIG'] = 
array(
'storage'=>"DB",
'options'=>array(
    'dsn'         => array(
        'phptype'  => 'mysql',
        'username' => '☆MySQLユーザ名☆',
        'password' => '☆MySQLパスワード☆',
        'hostspec' => '☆ホスト名☆',
        'database' => '☆データベース名☆',
        'new_link' => true,
        ),
    'table'       => 'xoops_users',
    'usernamecol' => 'uname',
    'passwordcol' => 'pass',
    'cryptType'   => 'md5',
    ),
);

2.OpenPNEのconfig.php内のsession_save_pathを設定
上の設定だけでもログインは出来るのですが、このままでは自動ログインが出来ません。
そこで、自動ログインするためにッションの設定をします。
OpenPNEのconfig.php内のsession_save_pathを設定します。
デフォルトではsession_save_pathがコメントアウトされているので、コメントアウトを削除します。

///
// セッション・クッキー設定
///

ini_set('session.gc_probability',1);
ini_set('session.gc_divisor',10000);

ini_set('session.gc_maxlifetime', 432000); // 5 days
//session_save_path('/tmp');

3.XOOPSのユーザIDとパスワードでOpenPNEにログインする
通常通りOpenPNEにログインしてください。
新規ユーザの場合は通常のOpenPNE同様プロフィール項目などの登録が必要です。
メールアドレスなどはXOOPSと同じにしてしまうと管理が楽でしょう。

OpenLDAP X OpenPNE

OpenPNEの外部認証としてLDAPを利用する
LDAPを利用することで、設定次第ではXoopsやZenCartなどのDBを直接、認証システムとして利用出来る様になる。

手順
(前提条件)
OpenPNEのインストール、LDAPに対応したアプリケーションのインストール

1.OpenPNEのconfig.php内のIS_SLAVEPNE、オプションを設定
2.LDAPのidでログインする

1.OpenPNEのconfig.php内のIS_SLAVEPNE、オプションを設定
IS_SLAVEPNEをtrueにして外部認証を許可します。
次に、オプションを設定します。
storageにLDAPを選択し、optionsを設定します。
以上で設定は終了。

// 外部認証を使用するかどうか
define('IS_SLAVEPNE' , false);

// IS_SLAVEPNEがtrueの場合のauthオプション
$GLOBALS['_OPENPNE_AUTH_CONFIG'] = 
array(
    'storage'=>"LDAP",
    'options'=>array(
        'url' => 'ldap://192.168.0.1',
        'basedn' => 'dc=example,dc=com',
        'userattr' => 'uid'
    ),

);

2.LDAPのidでログインする
OpenPNEのemail欄(名前欄)にLDAPのuid、password欄にLDAPのpasswordを入力。
そのままOpenPNEのプロフィール項目を記入し、通常通りOpenPNEの登録を完了してください。
メール承認後、LDAPのuidとpasswordでログイン出来ます。

GoogleApps X OpenPNE

手順

(前提条件)Google Appsへの申し込み、OpenPNEのインストール
1.config.php内のIS_SLAVEPNE、オプションを設定
2.Google Appsのアカウント設定
3.Gmailのアカウント(メールアドレス)とパスワードでOpenPNEにログインする

1.config.php内のIS_SLAVEPNE、オプションを設定 IS_SLAVEPNEをtrueに設定する。

optionsのhostをssl://pop.gmail.comに、portを995に設定する。

// 外部認証を使用するかどうか
define('IS_SLAVEPNE' , true);

// IS_SLAVEPNEがtrueの場合のauthオプション
$GLOBALS['_OPENPNE_AUTH_CONFIG'] = 
array(
'storage'=>"POP3",
'options'=>array(
    'host' => 'ssl://pop.gmail.com',
    'port' => '995'
    ),
);

2.Google Appsのアカウント設定

OpenPNEにログインしたいアカウント(メールアドレス)で、Google Appsにログインする。

右上の「設定」から「メール転送とPOP設定」に遷移すると、「POPのダウンロード」設定が、「1.ステータス:POPは無効になっています」となっており、POPが無効になっているので、すぐ下にある「すべてのメールでPOPを有効にする」というラジオボタンを選択し、POPを有効にして変更を保存する。
設定は終了。

3.Gmailのアカウント(メールアドレス)とパスワードでOpenPNEにログインする
OpenPNEにログインする(※この時点で、Google Appsでの認証は通過している)

「プロフィール入力画面」が表示されるので、入力し登録。

次に、「メールアドレス登録」が表示されるのでメールアドレスを入力し、メールを送信する(Google Appsのメールアドレスを入力しておくと管理が楽になる)

上で入力したメールアドレスにSNSから届いたメールを開き、パスワードを入力し、登録を完了させる。(このパスワードはほとんど使うことがないので、Google Appsと同じパスワードを入力しておくと管理が楽になる)
これで、すべての登録が完了。

※この設定をしたSNSに入ることが出来るのは、Google Appsのアカウントを持ったユーザだけになる。

かなり限定したユーザ(このドメインを使っているユーザ)のみログインできるSNSを作ることが出来る。

Geeklog X OpenPNE

OpenPNEの外部認証としてGeeklogを利用する

手順
(前提条件)
Geeklog、OpenPNEのインストール
OpenPNEのWEBサーバからGeeklogのMySQLに接続できること

1.OpenPNEのconfig.php内のIS_SLAVEPNE、オプションを設定 2.Geeklogのconfig.phpを設定する 3.Geeklogにユーザ登録する 4.OpenPNEへGeeklogに登録したユーザ名とパスワードでログインする

1.config.php内のIS_SLAVEPNE、オプションを設定

IS_SLAVEPNEをtrueにして、optionsを設定する。

// 外部認証を使用するかどうか
define('IS_SLAVEPNE' , true);
// IS_SLAVEPNEがtrueの場合のauthオプション
$GLOBALS['_OPENPNE_AUTH_CONFIG'] =
array(
'storage'=>"DB",
'options'=>array(
    'dsn'         => array(
        'phptype'  => 'mysql',
        'username' => '☆MySQLユーザ名☆',
        'password' => '☆MySQLパスワード☆',
        'hostspec' => 'localhost',
        'database' => '☆データベース名☆',
        'new_link' => true,
        ),
    'table'       => 'gl_users',
    'usernamecol' => 'users',
    'passwordcol' => 'passwd',
    'cryptType'   => 'md5',
    ),
);

2.Geeklogのconfig.phpを設定する
config.php ユーザ名を変更できない設定にする。

// ユーザが自分でユーザ名を変更(1:変更できる 0:変更できない)
$_CONF['allow_username_change'] = 0;

3.Geeklogにユーザ登録する
新規登録から、Geeklogにユーザ登録する

4.OpenPNEへGeeklogに登録したユーザ名とパスワードでログインする

※ パスワードの変更はGeeklogでおこなう。
※ メールアドレス変更は、Geeklog、OpnePNEそれぞれでおこなう。

メリット

  1. 標準機能なので、すぐに利用できる。

デメリット

  1. OpenPNEを招待制にできない。
  2. GeekloとOpenPNE、それぞれ個別にユーザ登録が必要。
  3. メールアドレスが二重管理になる。
  4. ニックネーム(OpenPNE)=ユーザ名(Geeklog)ではないのでわかりにくい

OpenPNE1http://wiki.geeklog.jp/index.php/OpenPNE1