Sunucu Tarafı PHP yönlendir

3 Cevap java

Ben bizim mevcut PHP web entegre gereken bir Java uygulaması var. Satıcı bize güvenli kimlik doğrulama ve tek oturum açma için izin vermek için bir sunucu tarafı yönlendirme yapmak istiyor, ama ben PHP bunu nasıl emin değilim. Aşağıdaki gibi satıcı iş akışını açıkladı:

  1. Kullanıcı bizim PHP sitesinde bir 'Open Application' linke tıkladığında
  2. PHP uygulama kimlik doğrulama parametreleri göndererek, Java uygulaması bir sayfa vurur
  3. Eğer başarılı olursa, PHP uygulama, bir 'yönlendirme' zorlar kullanıcının tarayıcısına, geri başlıklarını gönderir aksi PHP uygulaması bir hata görüntüler

Bu ne sağlayacak bizim PHP uygulaması güvenli bir Java uygulaması konuşmak için olabilir ve istemci kimlik doğrulama her türlü göndermek zorunda asla.

Kimden ne anlıyorum. NET ve Java inşa edilen bu yeteneği var, ama bunu yapmak için PHP bir yol bulamıyorum. Herhangi bir fikir?

UPDATE

Ben header ("Location: ...") kullanılarak bahsetmiyorum; bir yönlendirme yapmak için çalışır. Sadece gitmek için tarayıcı zorlar: bu sunucu tarafı yönlendirme ile Kicker uygulaması kimlik doğrulaması yapar ve istemci daha sonra header ("... Location") kullanarak oturum böylece geri istemciye tüm bu bilgileri gönderir olduğunu başka yerde.

UPDATE 2

autologin.php (kıvrılma yoluyla harici bir uygulama içine kullanıcı günlüğü taklit)

// 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 ('login' formunu içerir)

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 (Kısıtlı sayfa)

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

Fikir kullanıcı sonuçta 'restricted.php' almak istiyor. 'Login.php' ne simüle etmek istediğiniz kullanıcı 'login.php' formunu doldurarak ve 'restricted.php' içine kullanıcı giriş olduğunu oturum açmak için gerekli kodu içerir.

Benim yerel testler (autologin.php isabet restricted.php ve gizli belirteç yazdırılır yönlendirir), ancak birlikte kod çalışma Yukarıdaki pasajları ben çapraz uygulama işe almak gibi olamaz. Uygulamalar aynı etki olacak (https://domain.com/myapp, https://domain.com:1234/vendorapp).

Ben sadece benim satıcı yaptıklarını bana ne kapalı gidiyorum, herhangi bir dilde daha önce hiç yapmadım. Görünüşe göre daha önce PHP ile ele ve ne yapmak hiçbir fikrim yok hiç.

3 Cevap

Sadece çıkış normal bir HTTP yönlendirmesi header() Bu gibi:

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

Güncellemesi Re

Eğer doğru anlamak bunu yapmak gerekir:

  1. Tarayıcı Mesajları PHP isteği sunucuya giriş
  2. PHP komut dosyası JSP uygulaması için bazı özel biçimde oturum açma bilgilerini paketleri
  3. ({[) (0]} yoluyla) veya SOAPs veya ne olursa olsun PHP komut mesajları JSP uygulaması için gerekli
  4. PHP yanıtı alır ve gerekli bilgileri ayrıştırır
  5. PHP tarayıcıya geri başlığını ve / veya vücut veri gönderir

Adım 4, bilgiyi ayrıştırma, size bilgi göndermek ve almak nasıl bağlıdır. Eğer cURL yoluyla başlığında bunları alırsanız, true için set CURLOPT_HEADER gerekiyor ve cevaba gerekli verileri ayrıştırmak gerekir. Bu ilk boş satıra veya daha karmaşık üzerinde dize bölme gibi basit olabilir, sizin özel durumunuza bağlıdır.

Bu kullanıcı günlükleri nasıl your app de ele gereken bir şeydir. JSP uygulaması muhtemelen gerçek şifre ve kullanıcı adı kolları ve geri takip etmek gerekir bazı tür bir belirteç size uzatıyor.

gibi bu:

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

Ama php.net görmek ... önce başka bir kodu gelmelidir

Genellikle PHP ile birlikte olan curl kütüphane arıyoruz gibi geliyor.

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
}

Update:

Daha sonra, bunu, onlar hala bir sayfa açmış ziyaret her zaman oturum halinde $_SESSION['LoggedInTime'] + 3600 > time() görmek için kontrol edebilirsiniz:

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

Umarım bu yardımcı olur.