1. はじめに
本メニューでは、IdPとSPを共にカスタマイズします。
また、ユーザ情報(LDAP)も操作します。
内容としては、独自の属性をSPに送信し、SPのWebアプリケーション側で受信した属性値を使った制御を行います。
実習セミナーでは、属性受信の確認ページをWebアプリケーションとし、独自に追加したshadowExpire属性で制御します。(有効期限を使った制御)実習セミナーでは、属性受信の確認ページをWebアプリケーションとし、独自に追加したshadowExpire属性で制御します。
(有効期限を使った制御)
...
2. 実習セミナーでは
以下のような設定で行います。
手順書と照らし合わせながら、作業を進めてください。
...
・独自属性としてshadowExpireを使用
/etc/openldap/schema/nis.schema
に以下のように定義されていることを確認してください。これらの値を使用します。/slapd.d/cn\=config/cn\=schema配下にcn={5}nis.ldifがあるか確認します。
また、cn={5}nis.ldif
に以下のような定義が設定されていることを確認してください。これらの値を使用します。
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
Scheme: nis.schema
objectClass:
shadowAccount
attributetype ( shadowAccount
olcAttributeTypes: {8}( 1.3.6.1.1.1.1.10 NAME 'shadowExpire'
EQUALITY integerMatch
SYNTAX EQUALITY intege
rMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
|
・shadowExpireを送信属性に追加
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
手順書に従って、作業を行ってください。 |
...
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
以下は、test001ユーザに3日前の日付、test002ユーザに3日後の日付を設定するldifファイルです。
※参考までに本日() は、となります。
dn: uid=test001,ou=Test Unit1,o=test_o,dc=ac,c=JP
changetype: modify
add: objectClass
objectClass: shadowAccount
-
add: shadowExpire
shadowExpire: Today |
---|
Format | UNIXtime |
---|
Color | red |
---|
Offset | -3 |
---|
|
# ↑1970年1月1日からの日数()
dn: uid=test002,ou=Test Unit2,o=test_o,dc=ac,c=JP
changetype: modify
add: objectClass
objectClass: shadowAccount
-
add: shadowExpire
shadowExpire: Today |
---|
Format | UNIXtime |
---|
Color | red |
---|
Offset | +3 |
---|
|
# ↑1970年1月1日からの日数()
|
...
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
手順書に従って、作業を行ってください。 |
・属性受信の確認ページのサンプルコード
SP:/var/www/html/secure/index.phpに2つのPHP文を追加してください。
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
<html> <head> ↓ヘッダに下のphp部分を追加する <?php header("Expires: Dec, 20 Jul 2010 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>属性受信の確認ページ</title> <style type="text/css"> body {
(省略)
|
...
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
(省略)
<div id="maincenter">
<b <strong id="logintitle">属性受信の確認ページ</b><br>strong><br>
<?php
//error_reporting(E_ERROR | E_WARNING | E_PARSE);
error_reporting(E_ALL ^ E_NOTICE);
print " <b id='loginname'>あなたのIdPは、<>あなたのIdPは、<". htmlspecialchars($_SERVER['Shib-Identity-Provider']). ">です。</b><br>です。</strong>";
?>
<br>
</div>
<?php $nowt = time(); $strNow = date("Y年m月d日", $nowt); if (!empty($_SERVER['shadowExpire'])) { $expt = intval($_SERVER['shadowExpire'])*60*60*24; $strExp = date("Y年m月d日", $expt); $zant = $expt - $nowt; $zand = floor($zant/60/60/24); print "<div style=\"position: relative; top: 85px;\">"; print "<h1>現在:$strNow ,"; print "期限:$strExp ,"; print "残日数:".intval($zand+2)."日間</h1>"; print "</div>"; if ($zand < 0) { $errmsg = "有効期限を".intval(($zand+1)*-1)."日過ぎています。"; header("HTTP/1.1 301 Moved Permanently"); header("Location: https://ex-sp-testXX.gakunin.nii.ac.jp/secure/error.php?exp=".$strExp."&errmsg=".$errmsg); //↑各自SPのホスト名 exit(); } } ?>
↑mainテーブルの前に上のphp部分を追加する <table id="main" cellspacing="0" class="chart"> <thead> <tr> <th class="chart" width="280">属性</font></th> <th class="chart" width="420">属性値</font></th> "> <colgroup> <col width="280"> <col width="420" valign="top"> </colgroup> <thead> <tr> <th scope="col" class="chart">属性</th> <th scope="col" class="chart">属性値</th> </tr>
(省略)
|
※端末のサイズによっては表記がずれる可能性がございます。画面を広くしてご覧ください。
・有効期限切れエラーページのサンプルコード
SP:/var/www/html/secure/error.phpを作成します。
※有効期限が切れたユーザでアクセスすると、このエラーページが表示されます。
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>有効期限切れエラー</title>
</head>
<body>
<h1>有効期限切れエラー</h1>
<br>
有効期限 :<?php echo htmlspecialchars($_GET[exp]) ?><br>
メッセージ:<?php echo htmlspecialchars($_GET[errmsg]) ?><br>
</body>
</html>
|
...
3. 手順書
下記の手順書を参照し、作業を行います。
※上述の通りshadowExpire属性を対象とし、各種設定値に置き換える事を忘れないようにしてください。
...
4. 動作確認
①
設定後、Tomcatやshibdの再起動を行ってない場合は行なってください。設定後、IdPはTomcat、SPはApacheやshibdの再起動を行ってない場合は行なってください。
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
・IdP
systemctl restart tomcat
・SP
systemctl restart shibd
systemctl restart httpd systemctl restart shibd
|
② 各自が使用するSPの接続確認用ページにアクセスします。
パネル |
---|
borderColor | #cccccc |
---|
bgColor | #eeeeee |
---|
borderStyle | solid |
---|
|
例)1番を割り振られた場合
https://ex-sp-test01.gakunin.nii.ac.jp/
|
③ ログインボタンをクリックします。
④ DSの所属機関の選択画面が表示されるので、各自が使用するIdPを選択します。
⑤ IdPのログイン画面が表示されるので、Username/Passwordを入力して認証を行います。
※test001:有効期限切れ、test002:有効期限内、test003:有効期限なし
※本実習課題によるアクセス権限を設定している場合、relying-party.xmlの設定を解除
して、tomcatを再起動してください。して、
tomcatを再起動してください。
⑥ ユーザ情報(有効期限)で正しく制御されることを確認します。
test001の場合:有効期限切れエラーのページが表示されます。
test002の場合:属性受信の確認ページが表示され、有効期限や残り日数などが表示されます。
test003の場合:通常の属性受信の確認ページが表示されます。