J'ai une application Java dont j'ai besoin pour intégrer notre site web PHP existant. Le fournisseur veut que nous effectuions une redirection côté serveur pour permettre une authentification sécurisée et une authentification unique, mais je ne suis pas sûr de savoir comment faire cela en PHP. Le vendeur a expliqué le flux de travail comme suit:Redirection côté serveur en PHP
- utilisateur clique sur un lien « Ouvrir l'application » sur notre site PHP
- L'application PHP frappe une page sur l'application Java, l'envoi des paramètres d'authentification
- En cas de succès , l'application PHP envoie les en-têtes au navigateur de l'utilisateur, ce qui oblige une « redirection », sinon l'application PHP affiche une erreur
cela permettra serait pour notre application PHP pour parler en toute sécurité à l'application Java , et le client n'a jamais à envoyer une sorte de authentification. D'après ce que je comprends, .NET et Java ont cette fonctionnalité intégrée, mais je ne trouve pas de solution en PHP pour le faire. Des idées?
MISE À JOUR
Je ne parle pas en utilisant l'en-tête ("Location: ..."); fonction pour faire une redirection. Le kicker avec cette redirection côté serveur est que l'application fait l'authentification et renvoie toutes ces informations au client pour que le client soit ensuite connecté. Utiliser l'en-tête ("Location: ...") force le navigateur à aller autre part.
UPDATE 2
autologin.php (simule l'utilisateur se connectant à une application externe par l'intermédiaire de boucle)
// 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 (contient la forme 'login')
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 (page à accès restreint)
session_start();
if($_SESSION['auth']) {
echo 'Secret Token: '.$_SESSION['token'];
} else {
echo 'Please log in';
}
L'idée est que l'utilisateur souhaite finalement accéder à 'restricted.php'. 'login.php' contient le code nécessaire pour se connecter. Ce que je veux simuler, c'est que l'utilisateur remplisse le formulaire 'login.php' et connecte l'utilisateur à 'restricted.php'. Les extraits de code ci-dessus fonctionnent ensemble sur mes tests locaux (en appuyant sur autologin.php redirige vers restricted.php et le jeton secret est imprimé), mais je n'arrive pas à faire fonctionner l'application croisée. Les applications seront sur le même domaine (https://domain.com/myapp, https://domain.com:1234/vendorapp).
Je ne l'ai jamais fait auparavant dans aucune langue, je suis juste en train de partir de ce que mon fournisseur m'a dit qu'ils ont fait. Apparemment, ils n'ont jamais traité avec PHP avant et n'ont aucune idée de ce qu'il faut faire.
Re Mise à jour: Je ne comprends pas. Voulez-vous dire que l'application PHP "transmet" les en-têtes reçus de l'application Java au navigateur? Ensuite, le même principe s'appliquerait, vous définiriez les en-têtes avec 'header' et toute autre information dans le format requis dans le corps. – deceze
Cela ne sonne-t-il pas qu'il parle d'un simple POST côté serveur? Lisez le numéro 2 de la question. – gahooa
@deceze Alors utiliser cURL avec CURLOPT_HEADER => true et simplement jeter les informations d'en-tête au travail de l'utilisateur? – dragonmantank