2012-11-14 150 views
1

我們有一個新的b2b供應商希望通過URL使用基本身份驗證。基本身份驗證URL處理

他們想這樣來驗證:

//URL coming into our server 
    http://usernametext:[email protected]/listener.php 

如何通過我的listener.php腳本得到該URL的用戶名和密碼?

我試圖按照PHP手冊頁設置基本身份驗證的信息,但是它會彈出一個登錄框,這不是我所需要的,因爲這些Web服務相互交談,而不是人:

if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo '<response><error>No username and password found</error></response>'; 
    exit; 
} else { 

    //process request if username & password are legit 

} 
+0

基本http身份驗證依賴於http頭中的特殊條目,因此它不符合您首先通過URL傳遞用戶名和密碼的要求。只是不要返回401錯誤,而是在未經授權的情況下重定向到專用頁面。 – Stan

+0

儘管此方法嚴重不安全(以明文形式傳輸用戶名/密碼),您是否可以使用get變量? http://url.com/listener.php?username=USERNAME&pass=PASSWORD –

回答

2

感謝所有提供的解決方案。以下是我爲什麼解決了這個問題:

這是一個服務器配置問題。我需要在我的PHP中編譯Apache extension。一旦我這樣做了,$ _SERVER數組包含$ _SERVER ['PHP_AUTH_USER']和$ _SERVER ['PHP_AUTH_PW']值。在此之前,這些值從$ _SERVER陣列中缺失

0

爲什麼不通過古老的$ _GET發送信息?像 http://our.company.com/listener.php?usr='me'&pswd='secret'

+0

他們拒絕以任何其他方式做...瘋狂... – Slinky

-1

事情可能是這樣可以幫助:

if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
    exit; 
} else { 
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; 
} 

更詳細的您可以檢查:http-auth

更新:如果你不需要彈出框(這是確認用戶+通過非必需的授權網站)只需在目錄中添加.htaccess。

AuthType Basic 
AuthName "Password Required" 
+0

謝謝,但我已經看過那裏,幷包括一個片段在我的問題上面 – Slinky

+0

我添加了一些更新,以防止彈出框。 –