2012-11-14 90 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

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