[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:00612] Re: NetCommonsのシボレス化



東京都医学総合研究所 赤沢様

北見工業大学の折原と申します。
お世話になっております。

私も同じサイトを参考にシステムを構築しましたが、
本学の環境と参考サイトの環境では$app_cookiesの構造が
異なっていました。

$app_cookiesにどのような値が入っているかを
確認してみると良いかもしれません。

$app_cookiesの内容はcookieをセットする場所で
以下の処理を実行すると確認できると思います。
※ この処理はログインを中断しますので確認後は削除してください

print("<PRE>\n");
print_r($app_cookies);
print("</PRE>\n");
exit;


なお、本学の環境では以下の処理でcookieをセットできます。

foreach($app_cookies as $cookie){
  setrawcookie($cookie["name"], $cookie["value"], $cookie["expires"],
    $cookie["path"], $cookie["domain"], $cookie["secure"]);
}


参考になれば幸いです。


> UPKI-FEDのみなさま
> 
>  いつもお世話になっております。
>  都医学研の赤沢です。
> 
>  テストフェデレーションに参加中で、テスト用IdPとテスト用SPを
>  構築し、両者間の連携(※)もうまくいきました。
> 
>   ★学認サイトの「1.SPにテスト用のWebページを準備」に
>    従って、「属性確認用の簡単なPHPプログラム」を利用
>    させていただきました。
>    https://www.gakunin.jp/docs/fed/technical/sp/customize/sp-test2
> 
>  ここで、NetCommonsをシボレス化しようとしているのですが、
>  うまくいっておりません。たびたびで恐縮ですがお知恵を拝借
>  できますでしょうか。
> 
>   ※ご存じの方も多いかと思いますが、NetCommonsはオープンソースの
>    CMS兼グループウェアです。
>    http://www.netcommons.org/
> 
> [1] 当方の環境
> 
>  (1) テスト用IdP(以下、IdPといいます)
>     OS: CentOS 5.5
>     Apache: 2.2.3
>     PHP: 5.2.10
>     jdk-6u37-linux-i586-rpm.bin
>     tomcat 6
>     shibboleth-identityprovider-2.3.8
>   ※学認サイトの「技術ガイド」に従って構築しました。
> 
>  (2) テスト用SP(以下、SPといいます)兼NetCommonsサーバ
>     OS: CentOS 5.9
>     Apache: 2.2.3
>     PHP: 5.3.3
>     PHP PEAR: 1.4.9
>     MySQL: 5.0.95
>     NetCommons: 2.4.0.0
>     Shibboleth: 2.5.1
>   ※SPは学認サイトの「技術ガイド」に従って構築しました。
> 
>  蛇足ですが、両サーバともこの連休中はシャットダウンして
>  あります。この週末停電があるためです。
> 
> 
> [2] NetCommons
> 
>  https://sptest.igakuken.or.jp/htdocs/ にてアクセスできる
>  ようにしてあります。NetCommonsのローカルユーザを作成し
>  ローカル認証でログインできることも確認済みです。
> 
>  また、このローカルユーザは 当方のLDAPにも登録済みです。
>  LDAP と NetCommonsで二重のユーザ管理となりますが、
>  ここは妥協しています。
> 
>  クッキー名は session_cookie となるようにNetCommonsを
>  設定済みです。
> 
> [3] SPのシボレス化の方式
> 
>  https://www.gakunin.jp/docs/fed/technical/sp/WebApp
>  ↑の「2.既存のアプリケーションのユーザ管理へのProxyを用意する」
>  に従いました。
> 
>   ※「3. Shibbolethのセッションをもとにユーザ管理を行う」を
>    最初に試しましたが、これはうまくいきませんでした。
>    詳しくはNetCommons2公式サイトに書いておきました(ご参考)。
>    http://www.netcommons.org/bb7war9c0-4093/#_4093
>    この方法は興味があったので試したのですが、本採用するには
>    問題がありました。例えば、NetCommonsのユーザ権限や所属ルーム
>    を当方のLDAPで新たに管理する必要があるといったことで、
>    導入負荷が高すぎると考えています。
> 
> 
> [4] ログインProxy
> 
>  ログインProxy用プログラムを /login/index.php として用意しました。
>  index.php としては、学認サイトの次のページに記載の「PHPのサンプル」
>  を利用しました。
>  https://www.gakunin.jp/docs/fed/technical/sp/WebApp/pattern2
> 
>  ただし、次の箇所は当方の環境に合わせて変更しました。
>  (変更後のものをお示しします)
> 
> <?php
>  (中略)
>   $http =& new HTTP_Request("https://sptest.igakuken.or.jp/login");
>   $http->setMethod(HTTP_REQUEST_METHOD_POST);
>   $http->addPostData("login_id", "shibboleth_user");   ←☆1
>   $http->addPostData("password", "shibboleth_password"); ←☆2
>   $app_response = $http->sendRequest();
>   $app_cookies = $http->getResponseCookies();
> 
>   // 取得されたアプリケーションのセッションCookieをレスポンスに設定する
>   setcookie('session_cookie', $app_cookies["session_cookie"], 0, "/",
> "sptest.igakuken.or.jp");
> 
>   // ログイン後のトップページへリダイレクトする
>   header("HTTP/1.1 302 Found");
>   header("Location: https://sptest.igakuken.or.jp/htdocs");
> ?>
> 
>   ☆1 NetCommonsのオリジナルのログイン画面で、ユーザ名の
>      <input>タグでは 属性name="login_id" となっています。
>   ☆2 同じく、パスワード入力用の <input>タグでは 属性
>      name="password" となっています。
> 
> 
> [5] SPの設定
> 
>  /etc/httpd/conf.d/shib.conf に次の設定を追加しました。
> -----------------------------------------
> <Location /login>
>   AuthType shibboleth
>   ShibRequestSetting requireSession true
>   require valid-user
> </Location>
> 
> <Location /htdocs>
>   AuthType shibboleth
>   ShibRequestSetting requireSession true
>   require valid-user
> </Location>
> -----------------------------------------
> 
>  続いて、
>  service shibd restart
>  service httpd restart
>  を実行しました。
> 
> [6] うまくいく点
> 
>  https://sptest.igakuken.or.jp/login/ にアクセスすると
>  学認のDSにリダイレクトされ、当方のIdPを選択後、当方のIdPに
>  リダイレクトされます。ユーザ名とパスワードを入力すると
>  https://sptest.igakuken.or.jp/login/ に戻ってきます。
> 
> [7] うまくいかない点、試した事など
> 
>  [6]の結果、真っ白画面になってしまいました。
> 
>  まず、ログインproxy用プログラム(以下、proxyプログラム)中で
>  $_ENV が使われていますが、これは空の配列であることがわかりました。
> 
>  仕方ないので $_ENVの代わりに $_SERVER に置き換えました。
>  $_SERVER['eduPersonTargetedID'] というものも返って来ない(NULL)の
>  ため、$_SERVER['eppn'] としてみました。
>  このあたりの改造は、本メール冒頭の★印のプログラムを参考に
>  させていただきました。
> 
>  IdP認証後にSPの/login/に戻ってきた際に、NetCommons側(/htdocs/)
>  にリダイレクトされてしまうと、原因調査ができません。そこで以後は
>  次のようにリダイレクトさせている箇所はコメントアウトしました。
>   // ログイン後のトップページへリダイレクトする
>  //header("HTTP/1.1 302 Found");
>   //header("Location: https://sptest.igakuken.or.jp/htdocs");
>  ?>
> 
>  動作確認には、Firefox 18.02 とFirebug を使っているのですが、
>  session_cookie が deleted になってしまっていることがわかりました。
>   $app_cookies = $http->getResponseCookies();
>  に失敗している様子です。
> 
>  [4]の☆1と☆2の各第2引数は、NetCommons用の正しいユーザ名と
>  パスワードにしなくてはならないのかなと考え、実際に即値で
>  記述して動作を確認してみました。例えば、ユーザ名が igakuserで
>  パスワードが igakpass ならば、次のように書き換えました。
> 
>   $http->addPostData("login_id", "igakuser"); ←☆1
>   $http->addPostData("password", "igakpass"); ←☆2
> 
>  しかし、これでもsession_cookie が deleted になってしまって
>  います。
> 
>   $http =& new HTTP_Request("https://sptest.igakuken.or.jp/login");
>  としているところのパス部分(末尾)を次のように変えてみました。
>   $http =& new HTTP_Request("https://sptest.igakuken.or.jp/htdocs");
> 
>  これで試してみても同様にsession_cookie が deleted になって
>  しまってます。
> 
>  もちろん、何かやり直すたびに、Firefoxを再起動させてから試して
>  います。
> 
>  session_cookieさえちゃんと取得できるようになれば、認証はうまく
>  いくような気がするのですが、いかがでしょう。
> 
>  長くなって申し訳ありませんが、どうかご教授の程よろしくお願い
>  致します。
> 
> --
> 赤沢年一
> (公財)東京都医学総合研究所 情報システム室

================================
       北見工業大学技術部
            折原 淳
  xxxxxxx@xxxxxxxxxxxxxxxxxxxx
================================