Server-Side Redirect in PHP

stimmen
1

Ich habe eine Java-Anwendung, die ich brauche, mit unserer bestehenden PHP-Website zu integrieren. Der Verkäufer will, dass wir eine serverseitige Umleitung tun für eine sichere Authentifizierung und Single-Sign-On zu ermöglichen, aber ich bin nicht sicher, wie das in PHP zu tun. Der Verkäufer erklärt den Workflow wie folgt:

  1. Der Benutzer klickt auf eine ‚Open Application‘ -Link auf unserer PHP-Website
  2. Die PHP-Anwendung schlägt eine Seite auf der Java-Anwendung, die Authentifizierungsparameter Senden
  3. Wenn dies gelingt, sendet die PHP-Anwendung die Header zurück an den Browser des Benutzers, der eine ‚Umleitung‘ zwingt, sonst wird die PHP-Anwendung einen Fehler anzeigt

Was dies ermöglicht es wäre für unsere PHP-Anwendung sicher mit der Java-Anwendung zu sprechen, und der Kunde hat nie irgendeine Art von Authentifizierung zu senden.

Von dem, was ich verstehe, .NET und Java haben diese Fähigkeit in gebaut, aber ich kann nicht einen Weg in PHP, dies zu tun finden. Irgendwelche Ideen?

AKTUALISIEREN

Ich rede nicht über den Header ( „Location: ...“); Funktion eine Umleitung zu tun. Der Kicker mit dieser serverseitige Umleitung ist, dass der App, die eine Authentifizierung und sendet all diese Informationen zurück an den Client so, dass der Kunde dann angemeldet ist Header ( „Location: ...“). Zwingt nur den Browser zu gehen anderswo.

UPDATE 2

autologin.php (Simuliert den Benutzer Protokollierung in eine externe Anwendung über 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 (Enthält die '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 (Restricted Seite)

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

Die Idee ist, dass der Benutzer zu ‚restricted.php‘, um schließlich erhalten will. ‚Login.php‘ enthält den Code notwendig einzuloggen. Was ich will, simulieren, ist der Benutzer das Formular auf ‚login.php‘ ausfüllen und Protokollierung der Benutzer in ‚restricted.php‘.

Der oben genannte Code - Schnipsel zusammenarbeiten , um auf meinem lokalen Test (autologin.php schlägt Umleitungen an restricted.php und das geheime Token wird ausgedruckt), aber ich kann nicht scheinen , es Cross-Anwendung zu arbeiten. Die Apps werden auf der gleichen Domain ( https://domain.com/myapp , https://domain.com:1234/vendorapp ).

Ich habe noch nie zuvor in einem beliebigen Sprache getan, ich werde einfach weg von dem, was mein Verkäufer hat mir gesagt, sie getan haben. Anscheinend haben sie nie zuvor mit PHP behandelt und haben keine Ahnung, was zu tun ist.

Veröffentlicht am 30/12/2009 um 02:16
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
4

Sie haben soeben Ausgabe eine normale HTTP - Umleitung header()wie folgt aus :

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

Re-Update

Wenn ich das richtig verstanden, würden Sie brauchen, um dies zu tun:

  1. Browser POSTs anmelden Anfrage an PHP-Server
  2. PHP-Skript verpackt die Login-Informationen in einigen spezifischen Form für JSP-App
  3. PHP - Skript POSTs (via cURL ) oder SOAPs oder was auch immer notwendig ist , um JSP - App
  4. PHP empfängt die Antwort und analysiert, um die notwendigen Informationen
  5. PHP sendet Header und / oder Körperdaten zurück zum Browser

Schritt 4, die Informationen Parsen, hängt davon ab , wie Sie die Informationen senden und empfangen. Wenn Sie sie im Header über cURL erhalten, müssen Sie setzen CURLOPT_HEADER auf trueund die erforderlichen Daten aus der Antwort zu analysieren. Dies kann so einfach sein wie die Zeichenfolge auf der ersten Leerzeile oder komplizierteren Aufspalten, das hängt von Ihrer spezifischen Situation.

Wie dies meldet sich der Benutzer in Ihrer App ist etwas , das Sie brauchen auch zu behandeln. Die JSP - App behandelt wahrscheinlich das eigentliche Passwort und Benutzernamen und gibt Ihnen wieder ein Token von einer Art , die Sie der Spur zu halten brauchen.

Beantwortet am 30/12/2009 um 02:21
quelle vom benutzer

stimmen
6

so was:

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

Aber es muss vor jedem anderen Code ... siehe php.net

Beantwortet am 30/12/2009 um 02:22
quelle vom benutzer

stimmen
2

Es klingt wie Sie für die Suche curl - Bibliothek, die in der Regel mit PHP gebündelt.

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
}

Aktualisieren:

Später können Sie überprüfen $_SESSION['LoggedInTime'] + 3600 > time(). , Um zu sehen , ob sie noch angemeldet werden jedes Mal , wenn sie ein in Seite angemeldet besuchen, dies tun:

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

Hoffe das hilft.

Beantwortet am 30/12/2009 um 03:20
quelle vom benutzer

stimmen
0

Wenn Sie versuchen , PHP und Java im Web zu integrieren, können Sie in Quercus / Harz zu suchen. Ihre PHP kann dann Java - Code direkt aufrufen. Da sie auf dem gleichen Server ausgeführt werden , könnte der Java - Code schreiben alle Cookies, Einrichtung keine Sitzungen oder tun alle notwendigen Setup - Verarbeitung. http://www.caucho.com/resin-3.0/quercus/tutorial/module/index.xtp

Beantwortet am 30/12/2009 um 15:50
quelle vom benutzer

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