webForumDet fria alternativet

Skicka/ta emot HTTP GET/POST

0 svar · 324 visningar · startad av pettsson

pettssonMedlem sedan jan. 2002777 inlägg
#1

Kort beskrivning av situationen: Jag ska logga in användare på min sida med deras konto på skolans servrar. Användaren skickas från min sida till en sida på inloggningsservern. Om den godkänner användarens inloggningsuppgifter skickar den användaren till en sida som anges som inparameter, i mitt fall localhost/ext/login.php. Denna får utdata i sin querystring som ser ut såhär: status=OK&handle=..., där handle är en 32-tecken lång sträng. Nu måste jag skicka detta handle (med antingen GET eller POST) till en annan sida på servern, som ska verifiera att handle:n verkligen stämmer. Därefter svarar den med POST på formen status=OK|FAIL.

Problemet är att när jag skickar handle:n till servern får jag en HTTP 302 med en ny, "säker", adress till vilken jag ska skicka datat igen. När jag skickar till denna adress får jag inget svar. Om jag går till denna adress så får jag ett meddelande om att inloggning lyckats, men då kan jag inte verifiera det själv, eftersom denna sida består i "Grattis, du kunde logga in. Have some cake". Inget vidarebefodrande av data. Alltså kan jag inte sätta mina sessionsvariabler och gå vidare till min sida, och då har jag liksom tappat poängen med inloggningen...

I login.php har jag nedanstående:
Del 1: Jag har fått det första OK, så vi skickar en förfrågan till första verifikationssidan, verifyAuthentication.jsp och ser vad vi får för svar:

  $req="GET /verifyAuthentication.jsp?handle=" . $_GET['handle'] . " HTTP/1.0\n" .
       "Host: login.kth.se" . "\n\n";
  $lc=fsockopen("ssl://login.kth.se",443);

  fwrite($lc,$req);
  while(!feof($lc)) {
   $resp.=fread($lc,1024);
  }

Del 2: Vi sållar fram det intressanta ur svaret, dvs den nya adressen:

  $headers=explode("\n",$resp);
  unset($resp);

  // Tar bort "Location: https://" och radbrytning
  $newaddr=trim(substr($headers[2],18));

  $docstart=strpos($newaddr,"/")+1;
  $docend=strpos($newaddr,"?");
  $verifier=substr($newaddr,$docstart,$docend-$docstart); // =login;jsessionid=...
  $verparam=substr($newaddr,$docend+1);

Del 3: Vi skickar till den nya adressen. Den otacksamme typen vägrar dock att svara. Bah.

  $req="GET /" . $verifier . "?" . $verparam . " HTTP/1.0\n" . 
       "Host: login.kth.se\n\n";
  fwrite($lc,$req);
  while(!feof($lc)) {
   $resp.=fread($lc,1024);
  }

  fclose($lc);

Något som framstår som fantastiskt fel? Jag har prövat ett dussin variationer på del 3, bland annat att använda POST med ledning av ett inlägg av SPiN från 2003, vilket var det ända jag hittade när jag sökte. *Mycket* tacksam för hjälp.

122 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
119 ms — hämta tråd, inlägg och bilagor (db)