XAMPP Lite と共に使う| 上へ| 次へ

社内システムからシングルサインオン(SSO)できるようにする

ここでは、既存の社内システムユーザー情報を使って、どのようにフレッシュリーダーへのシングルサインオン (SSO) を実現できるかを示します。

ここで紹介する手法は限定的かつ単純化されたものです。実際に社内システムへの組み込みにあたってはそれぞれシステムの構成やセキュリティーポリシーに合わせてご利用くださいますよう、よろしくお願いします。

例の記述には PHP を利用していますが、同様の処理を他の処理系でも実現可能です。

ユーザーリストを同期する

フレッシュリーダーインストールする

インストールする を参照ください。

デモユーザーを全員削除する

[システム設定 ] >> 「ユーザー情報の設定」で、インストール時に登録されているデモユーザーをすべて削除します。

ユーザーリストを作成する

以下のフォーマットで社内システムユーザーフレッシュリーダーを使用するユーザーリストを作成します。
ユーザーリストを出力する方法につきましてはお使いの社内システムにより異なります。

"ユーザー名","ログインID"

"山田 太郎","taro"
"鈴木 花子","hanako"
"入山 孝光","iriyama"

上記リストを入力にユーザー毎にパスワード自動生成し、フレッシュリーダーインポートできる形式を作成するスクリプトを用意します。

パスワードは例えば、ハッシュ関数などを用いて、「秘密の鍵」と「ログインID」などから作成するとよいでしょう。

実装例 gen_userlist.phpPHP


<?php
// フレッシュリーダーインポートできる形式の
// ユーザーリストを作成
while($line=fgets(STDIN)) {
    if (preg_match('/^"(.*)","(.*)"$/',$line,$matches)) {
        echo '"","'.$matches[1].'","'.$matches[2].'","'.generate_password($matches[2]).'"'."\n";
    }
}

// $login_id と $secret_key からパスワードを生成する
function generate_password($login_id) {
    $secret_key='sso_passwd';
    $password=md5($login_id.$secret_key);
    return $password;
}
?>

上記スクリプトによって、以下のユーザーリストを得ることができます。

例)UNIXシステムでのスクリプトの実行
スクリプトファイル名を gen_userlist.php とした場合

% php gen_userlist.php < original_userlist.csv > freshreader_userlist.csv

"","山田 太郎","taro","1e1e29bb929e1b07ae63aeb98c92927e"
"","鈴木 花子","hanako","88f70531f8f27ae5815e5aacce66c294"
"","入山 孝光","iriyama","6298ebda64b8681c34a2d6bad06bd114"

フレッシュリーダーインポートする

[システム設定 ] >> 「ユーザー情報のインポートエクスポート」から作成したユーザーリストインポートします。

シングルサインオンの実現

ログインID とパスワードログインできるようにする

[システム設定 ] >> 「基本情報の設定」 で、ログインID によってフレッシュリーダーログインできるように設定します。(会社/グループ名、ログイン方法等を設定する 参照)。

社内システムログイン時にフレッシュリーダーログインする

社内システムログイン処理に手を加えてフレッシュリーダーログインするロジック組み込みます。

ここでは、

とします。

login.php にはログインが成功した際に、フレッシュリーダーへのログイン処理ページを呼び出すように記述します。

login.php


<?php
// 社内システム認証処理。これはダミーです。
function auth() { return true; }
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php
if ($_POST) {
    echo '<meta http-equiv="refresh" content="2;url=portal.php" />'."\n";
}
?>
</head>
<?php
if ($_POST && auth()) {
    // 社内システムログインしたときにフレッシュリーダーログインする
    // その際にログインしたユーザーIDを渡す
    echo '<body>';
    echo '<p>ログイン中です</p>';
    echo '<iframe src="login_freshreader.php?u='.$_POST['userid'].'"></iframe>';
    echo '</body>';
    exit;
}
?>
<form method="POST" action="login.php">
<div>ユーザーID<br/><input type="text" name="userid" value=""/></div>
<div>パスワード<br/><input type="password" name="password" value="" /></div>
<input type="submit" value="ログイン" />
</form>
</body>

上記例では POST時の画面中にインラインフレームを用意し、そこに login_freshreader.php を表示しています。フレッシュリーダーへのログイン部分を隠したい場合はインラインフレームスタイルstyle="width:0px;height:0px;border:0px none" などと設定すると隠すことができます。

login_freshreader.php


<?php
// ユーザーIDを取得
$user=$_GET['u'];

// $userログインしていることをチェックする
// 関数を実装してください。これはダミーです。
function login_check() { return; }
login_check();

// パスワード生成ロジック
// 実際には Webサーバーからアクセスされない
// 位置に隠蔽するように実装してください。
$secret_key='sso_passwd';
$password=md5($user.$secret_key);

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
//<![CDATA[
window.onload=function() {
    // 自動ログイン処理
    var theform=document.getElementById("login_form");
    theform.submit();
}
</script>
//]]>
</head>

<body>
 <!-- ログインフォーム -->
 <form id="login_form" method="POST" action="/freshreader/index.php">
  <input type="hidden" name="userid" value="<?php echo htmlspecialchars($user) ?>"/>
  <input type="hidden" name="password" value="<?php echo $password ?>" />
  <input type="hidden" name="logintarget" value="logo.php" />
 <input type="submit" value="ログイン" />
 </form>
</body>

login_freshreader.php は自動的にフレッシュリーダーログインPOST処理を行い、フレッシュリーダーのロゴを表示します。

社内システムポータルページフレッシュリーダーリンクを用意する

login.php におけるログインPOST処理が終了した後、社内システムポータルページ portal.phpリダイレクトしますが、このポータルページフレッシュリーダーへのリンクを用意しておくと、ユーザーはそのリンククリックするだけでログイン操作なしにフレッシュリーダーアクセスすることができるようになります。

portal.php


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>

<body>
<h2>
社内ポータルページ
</h2>
<p>
社内ポータルコンテンツなどなど。
</p>
<h3>メニュー</h3>
<ul>
<li><a href="/freshreader/index.php">フレッシュリーダー</a></li>
</ul>
</body>

ユーザー情報を変更する

ここでは、社内システムフレッシュリーダーが連携している状態で運用中に発生するユーザー情報の変更に伴う処理について説明します。

ユーザーを追加する

ほぼ、「ユーザーを同期する」と同じ手順で追加するユーザーリストを作成し、フレッシュリーダーインポートします。この際、既存のユーザーは削除しないようにします。

ユーザーを変更する

[システム設定 ] >> 「ユーザー情報のインポートエクスポート」から [ユーザー情報の CSV (UTF-8)](またはSJIS) をクリックしてフレッシュリーダーの現在のユーザーリストを保存します。

変更の必要なユーザーユーザー名、ログインID、パスワードを修正してインポートします。この際、左端の ユーザーID を変更しないように注意します。これは、フレッシュリーダーが、ユーザーIDでユーザーを識別しているためです。

XAMPP Lite と共に使う| 上へ| 次へ
track feed