2012-11-14 2 views
1

У нас есть новый поставщик b2b, который хочет использовать базовый auth через URL.Основная обработка URL-адресов аутентификации

Они хотят, чтобы проверить подлинность, как это:

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

Как я могу получить имя пользователя и пароль из URL с помощью моего listener.php сценария?

Я попытался установить основные AUTH заголовки на странице PHP человек, но он всплывает окно входа в систему, которая не то, что мне нужно, так как это веб-сервисы говорят друг с другом, а не люди:

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

Благодаря всем предлагаемым решениям. Вот что решило эту проблему для меня:

Это была проблема конфигурации сервера. Мне нужно было скомпилировать Apache extension в моем PHP. Как только я это сделал, массив $ _SERVER содержал значения $ _SERVER ['PHP_AUTH_USER'] и $ _SERVER ['PHP_AUTH_PW']. До этого эти значения отсутствовали в массиве $ _SERVER

0

Почему бы не отправить информацию через старый добрый $ _GET? Что-то вроде http://our.company.com/listener.php?usr='me'&pswd='secret'

+0

Они отказываются делать это любым другим способом ... Crazy ... – 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

Update: Если вам не нужно всплывающее окно (которое пользователь подтверждение + переходят на не требуемый сайт auth) просто добавьте .htaccess в каталог.

AuthType Basic 
AuthName "Password Required" 
+0

Спасибо, но я уже посмотрел туда и включил фрагмент в мой вопрос выше – Slinky

+0

I добавлено некоторое обновление, чтобы предотвратить всплывающее окно. –

Смежные вопросы