外部認証の設定の解説です。

外部認証とは

  • 認証情報の入力・ユーザーアカウントの管理をPukiWiki外のシステムに移譲する認証方式です。
  • Single Sign Onシステムと連携するために利用できます。
  • Digest認証やSNS連携ログインなど、PukiWiki本体が対応していない認証を利用することも可能です。

外部認証は PukiWiki 1.5.1 以降で利用可能です。

仕組み

  • 認証が必要なタイミングで、設置したPukiWikiと同じサーバー内にある、PHPページ(以下、認証PHPページと呼びます)へリダイレクトが行われます。
  • 認証PHPページで認証を行います。
  • 認証PHP内のロジックで、SESSION['authenticated_user'] に認証に成功したユーザー名を格納します。
  • 認証PHPには login_after というパラメータでログイン後のURLが指定されているので、このURLへリダイレクトを行います。
  • 『SESSION['authenticated_user'] にユーザー名が格納されていること』を以って、PukiWiki側では認証を通過したものとして扱います。

pukiwiki.ini.php 設定

$auth_type = AUTH_TYPE_EXTERNAL;
$auth_external_login_url_base = './login/extlogin.php'
  • $auth_type
    • 外部認証の場合、 AUTH_TYPE_EXTERNAL
  • $auth_external_url_base
    • 実際の認証を行うPHPページのURL

LDAP設定 (任意)

$ldap_user_account = 1;
$ldap_server = 'ldap://ldapserver:389';
$ldap_base_dn = 'ou=Users,dc=ldap,dc=example,dc=com';
$ldap_bind_dn = 'uid=user_for_bind,dc=example,dc=com';
$ldap_bind_password = 'xxxx';

外部認証で認証したユーザー名から、LDAP経由で情報を取得する際にはLDAPの設定を行います。詳細は ../LDAP を参照してください。 不要な場合、 $ldap_user_account = 0; に設定します。

PukiWikiが取得・利用する属性は以下の通りです

  • 認証ユーザーの Full name (ページ編集時に記録される)
  • 認証ユーザーが属しているグループ (ページアクセス制御に利用される)

read/edit/search設定

閲覧制限:

$read_auth = 1;

編集制限:

$edit_auth = 1;

検索制限:

$search_auth = 1;

グループ

定義済みグループ

  • valid_user: 認証を通ったユーザーすべてが属しているグループ

PukiWiki内グループ

  • $auth_groups で外部認証ユーザーを含むグループを定義できます。
    $auth_groups = array(
      'group_1' => 'ext_user_a,ext_user_b,ext_user_c',
    );

LDAPグループ

  • $ldap_user_account が 1 の場合、LDAP経由で取得したグループを利用できます
  • 'ldap:group_a' 'ldap:group_b' 等

認証PHPページ

認証PHPページはPukiWiki配布パッケージには含まれていません。各動作環境に合わせて作成する必要があります。

  • 入力パラメータ - url_after_login
    • 認証完了後、リダイレクトするPukiWiki内URL
  • 動作
    • ページ内で認証を行い、認証を通過した場合、セッション $_SESSION['authenticated_user'] にユーザー名を格納し、url_after_login にリダイレクトする。

認証PHPページ - サンプル

環境変数 REMOTE_USER を認証ユーザーとする認証PHP

login/exlogin.php :

<?php
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
mb_internal_encoding('UTF-8');
mb_http_input('pass');
mb_http_output('pass');

$url_after_login = filter_input(INPUT_GET, 'url_after_login');
$url_after_login_html = htmlspecialchars($url_after_login);
$page = filter_input(INPUT_GET, 'page');

session_start();
session_regenerate_id();
$user = filter_input(INPUT_SERVER, 'REMOTE_USER');
$_SESSION['authenticated_user'] = $user;

define('URL_PREFIX', 'http://pukiwiki.example.com/'); //★必ず編集すること - 対象PukiWikiサイトのドメイン OpenRedirect防止
if (substr($url_after_login, 0, strlen(URL_PREFIX)) === URL_PREFIX) {
   header('HTTP/1.0 302 Found');
   header('Location: ' . $url_after_login);
}
?>
<html>
   <head>
       <meta charset="utf-8">
       <title>External login</title>
   </head>
   <body>
       user: <b><?php echo htmlspecialchars($user) ?></b><br>
       page: <?php echo htmlspecialchars($page) ?><br>
       url_after_login: <a href="<?php echo $url_after_login_html ?>"><?php echo $url_after_login_html ?></a><br>
   </body>
</html>



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-08 (火) 03:09:28
Site admin: PukiWiki Development Team

PukiWiki 1.5.1+ © 2001-2016 PukiWiki Development Team. Powered by PHP 5.6.30-0+deb8u1. HTML convert time: 0.316 sec.

OSDN