社内システムからシングルサインオン(SSO)できるようにする
ここでは、既存の社内システムのユーザー情報を使って、どのようにフレッシュリーダーへのシングルサインオン (SSO) を実現できるかを示します。
ここで紹介する手法は限定的かつ単純化されたものです。実際に社内システムへの組み込みにあたってはそれぞれのシステムの構成やセキュリティーポリシーに合わせてご利用くださいますよう、よろしくお願いします。
例の記述には PHP を利用していますが、同様の処理を他の処理系でも実現可能です。
ユーザーリストを同期する
フレッシュリーダーをインストールする
インストールする を参照ください。
デモユーザーを全員削除する
[システム設定 ] >> 「ユーザー情報の設定」で、インストール時に登録されているデモユーザーをすべて削除します。
ユーザーリストを作成する
以下のフォーマットで社内システムのユーザーでフレッシュリーダーを使用するユーザーのリストを作成します。
※ユーザーリストを出力する方法につきましてはお使いの社内システムにより異なります。
"ユーザー名","ログインID"
例
"山田 太郎","taro" "鈴木 花子","hanako" "入山 孝光","iriyama"
上記リストを入力にユーザー毎にパスワードを自動生成し、フレッシュリーダーがインポートできる形式を作成するスクリプトを用意します。
パスワードは例えば、ハッシュ関数などを用いて、「秘密の鍵」と「ログインID」などから作成するとよいでしょう。
<?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 にはログインが成功した際に、フレッシュリーダーへのログイン処理ページを呼び出すように記述します。
<?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" などと設定すると隠すことができます。
<?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 へリダイレクトしますが、このポータルページにフレッシュリーダーへのリンクを用意しておくと、ユーザーはそのリンクをクリックするだけでログイン操作なしにフレッシュリーダーへアクセスすることができるようになります。
<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でユーザーを識別しているためです。


