[PHP-users 35558] post命令を受け取るサイトへのシングルサインオン

ram ram @ hatsuho.co.jp
2011年 5月 2日 (月) 10:53:21 JST


こんにちは。
このメーリングリストに出してよいものかと迷ったのですが、質問させて頂きた
いと思います。

ID、パスワードを指定してフォーム認証を行っているパッケージがあります。
ソースを見ると、以下のようになっています。
<FORM name="form1" method="post" action="http//localhost/p/p @ login.exe">
<INPUT type='text' name='id' value=''>
<INPUT type='password' name='password'>
</FORM>
これを別サーバーの認証を使って自動的に行いたいと思っています。
具体的には、個人アカウントで認証して組織を取得、組織毎のアカウントとパス
ワードに置き換えて
上記のパッケージに対してログオンする、シングルサインオンもどきのことを行
いたいと思っています。
headerに対するパラメタ値を渡すにはどうしたらよいのでしょうか?
自分で作ったものであれば、GETで受け取るようにするなり、セッション変数で
渡せるように作り直すことも可能でしょうが、パッケージなのでそうもいきません。

ネットで同じような用途かどうか判りませんが、POST送信をPHPで行う方法が書かれて
ありましたので、上記のパッケージに対して強制的にPOST送信でログオンさせる
スクリプトを作ってみました。(server及びgroupはログインフォーム上になくhtml上
で隠しフィールドとして記述されているパラメタ)

パスワードの属性に問題があるのかどうか判りませんが、動作しません。
エラーも何も出ないので調べようもなく行き詰っています。

<?php
$server = "http//localhost/p/login.exe";
$host = "localhost";
$port = 80;
$timeout = 30;
$userid = "MYNAME";
$password = "PASSWORD";
$data = "userid=".$userid."&password=".$password."&server=mars&group=PPP";
$sock = fsockopen($host, 80, $errno, $errstr, 60);
if($sock === FALSE){
  echo "fsockopen error";
  return (-1);
}
fwrite($sock, "POST " . $server . " HTTP/1.0\r\n");
fwrite($sock, "Content-Type: application/x-www-form-urlencoded\r\n");
fwrite($sock, "Content-Length: " . strlen($data) . "\r\n");
fwrite($sock, "\r\n");
fwrite($sock, $data);
fwrite($sock, "\r\n");
fclose($sock);
?>

このパッケージに対して、直接アカウントを指定するシングルサインオン自体は、使
用中のグループウェア上で実装されているので、何か方法があるかと思い、
お知恵を拝借致したくお願い申し上げます。

▼最終的に動作させたいスクリプトのイメージ
<?php
include_once('@Svr_Check.php');
if(isset($_POST['id'])){
  if(Svr_Check($_POST['id'],$_POST['pass']) == true){
// 入力値が渡せない
    ????=$_POST["id"];
    header("Location:http//localhost/p/login.exe");
  }
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Login</title>
</head>
<body>
<h3>ログイン</h3>
IDとパスワードを入れて下さい。
<form action="p @ login.php" method="post">
ID:<input type="text" name="id" value="" size="20" maxlength="20">
PASSWORD:<input type="password" name="pass" value="" size="20"
maxlength="20">
<input type="submit" value="OK">
</form>
</html>

初穂太郎




PHP-users メーリングリストの案内