Server-Side Omadresser i PHP

stemmer
1

Jeg har et Java-program som jeg trenger for å integrere våre eksisterende PHP nettside med. Leverandøren ønsker at vi skal gjøre en server-side redirect å tillate sikker autentisering og single-sign-on, men jeg er ikke sikker på hvordan du gjør det i PHP. Selgeren forklarte arbeidsflyt som følger:

  1. Bruker klikker på en 'Åpen søknad' linken på vår PHP stedet
  2. PHP-programmet treffer en side på Java-program, sender godkjenningsparametere
  3. Hvis de lykkes, sender PHP-programmet hodene tilbake til brukerens nettleser, som tvinger en 'redirect', ellers viser en feil PHP-app

Hva dette vil tillate ville være for vår PHP-app for å sikkert snakke med Java app, og kunden har aldri å sende noen form for godkjenning.

Fra hva jeg forstår, .NET og Java har denne muligheten innebygd, men jeg kan ikke finne en måte i PHP til å gjøre dette. Noen ideer?

OPPDATER

Jeg snakker ikke om å bruke header ( Location: ...); funksjon for å gjøre en omdirigering. Kicker med server-side redirect er at app gjør godkjenning og sender all denne informasjonen tilbake til klienten slik at klienten blir deretter logge inn ved hjelp av header ( Location: ...). Bare tvinger leseren til å gå andre steder.

UPDATE 2

autologin.php (Simulerer bruksloggingen til en ekstern app via curl)

// The login 'form' is at login.php
$ch = curl_init('http://domain.local/login.php');
// We are posting 2 variables, and returning the transfer just so it doesn't dump out
// Headers are processed by the callback function processHeaders()
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'processHeaders');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=user&password=pass');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute curl, close the connection, and redirect the user to a 'restricted' page
$response   = curl_exec($ch);
curl_close($ch);
header(Location: http://domain.local/restricted.php);

function processHeaders($ch, $header) {
    // Dump the response headers to the client
    header($header);
    strlen($header);
}

login.php (Inneholder 'login' form)

session_start();
if($_POST) {
    if($_POST['username'] == 'user' && $_POST['password'] == 'pass') {
        $_SESSION['auth'] = 1;
        $_SESSION['token'] = md5(time());
    } else {
        echo 'Auth failed';
    }
} else {
    echo 'Invalid access type';
}

restricted.php (Begrenset side)

session_start();
if($_SESSION['auth']) {
    echo 'Secret Token: '.$_SESSION['token'];
} else {
    echo 'Please log in';
}

Tanken er at brukeren ønsker å til slutt komme til 'restricted.php'. 'Login.php' inneholder koden er nødvendig for å logge inn. Det jeg ønsker å simulere er brukeren fylle ut skjemaet på 'login.php' og logger brukeren inn i 'restricted.php'.

De ovennevnte kodebiter jobbe sammen på min lokale tester (treffer autologin.php omdirigerer til restricted.php og hemmeligheten token skrives ut), men jeg kan ikke synes å få det til å fungere på tvers av søknaden. Den apper vil være på det samme domene ( https://domain.com/myapp , https://domain.com:1234/vendorapp ).

Jeg har aldri gjort dette før i alle språk, jeg bare går ut av hva min leverandør har fortalt meg at de har gjort. Angivelig de aldri har jobbet med PHP før og aner ikke hva jeg skal gjøre.

Publisert på 29/12/2009 klokken 23:16
kilden bruker
På andre språk...                            


4 svar

stemmer
4

Du bare sende ut en vanlig HTTP redirect header()slik:

<?php header('Location: http://www.example.com/'); ?>

Re Update

Hvis jeg forstår riktig du trenger å gjøre dette:

  1. Nettleser innlegg login forespørsel til PHP server
  2. PHP-script pakker påloggingsinformasjonen i noen spesifikk form for JSP app
  3. PHP script innlegg (via cURL ) eller såper eller det som er nødvendig for å JSP app
  4. PHP mottar respons og analyserer ut nødvendig informasjon
  5. PHP sender header og / eller kropps data tilbake til nettleseren

Trinn 4, analysere informasjonen, avhenger av hvordan du sender og mottar informasjon. Hvis du får dem i hodet via cURL, må du sette CURLOPT_HEADER til trueog analysere de nødvendige data ut av responsen. Dette kan være så enkelt som å splitte strengen på den første tomme linjen eller mer komplisert, det avhenger av din situasjon.

Hvordan dette logger inn på brukeren din app er noe du trenger for å håndtere også. JSP app håndterer sannsynligvis selve passord og brukernavn og hender du tilbake et tegn av noe slag som du trenger for å holde styr på.

Svarte 29/12/2009 kl. 23:21
kilden bruker

stemmer
6

som dette:

header("Location: http://www.example.com/")

Men det må komme før noen annen kode ... se php.net

Svarte 29/12/2009 kl. 23:22
kilden bruker

stemmer
2

Det høres ut som du er ute etter den curl bibliotek, som vanligvis er sammen med PHP.

http://php.net/manual/en/book.curl.php

<?php
session_start();

// Receive username / password from $_POST

// Prepare CURL object for post

// Post u/p to java server

// Read response

if($success)
{
    header('Location: nextpage.php');
    $_SESSION['LoggedInTime'] = time();
    exit;
} 
else
{
    //display error
}

Oppdater:

Senere kan du sjekke $_SESSION['LoggedInTime'] + 3600 > time(). For å se om de fortsatt er logget inn Hver gang de besøker en logget inn side, gjør du dette:

if($_SESSION['LoggedInTime'] + 3600 > time()) 
{
     $_SESSION['LoggedInTime'] = time() + 3600;
} 
else
{
     header('Location: /login.php?Message=session+expired');
     exit;
}

Håper dette hjelper.

Svarte 30/12/2009 kl. 00:20
kilden bruker

stemmer
0

Hvis du prøver å integrere php og java på nettet, kan det være lurt å se på Quercus / Resin. PHP kan da ringe java-kode direkte. Siden de kjører på samme server, kan Java-koden skrive noen cookies, oppsett noen økter eller gjør noe nødvendig oppsett behandling. http://www.caucho.com/resin-3.0/quercus/tutorial/module/index.xtp

Svarte 30/12/2009 kl. 12:50
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more