Базовая аутентификация HTTP передается на другой поддомен - PullRequest
1 голос
/ 06 мая 2011

Я пытаюсь передать базовую HTTP-аутентификацию от одного субдомена к другому, чтобы не просить людей войти в систему дважды.

Первый поддомен поддерживает PHP, а второй - приложение ASP.Приложение ASP запрашивает приглашение Basic HTTP Auth (после отправки они имеют доступ к веб-приложению), но моя цель - сделать так, чтобы он принудительно вводил правильный вход в систему, чтобы он не запрашивал пользователя, и они могли получить доступ к сетиприложение прямо сейчас.

На стороне PHP я попробовал следующее:

$base64value = base64_encode($value);
setcookie("Authorization",$base64value, time()+3600*24);

Я также успешно получил Аутентификацию заголовка, но, похоже, она не передаетсяна следующей странице, даже если она имеет то же значение

header('WWW-Authenticate: Basic realm="'.$base64value.'"');

Я также попытался установить домен с файлом cookie, но безуспешно.Правда ли, что вы не можете передать HTTP Basic Authentication через cookie?Похоже, 2 разные техники.

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Обычная аутентификация использует заголовок HTTP Authorization, который вычисляет веб-клиент, а не cookie. Так что да, вы не можете пройти аутентификацию с помощью этой техники.

Вам необходимо изменить дизайн аутентификации. Вы можете посмотреть обратное проксирование на одном из сайтов за другим или настроить службу CAS .

0 голосов
/ 15 марта 2018

Вы можете сгенерировать все ссылки с аутентификацией, если пользователь уже вошел в систему:

<a href="https://<?php if (isset($_SERVER['PHP_AUTH_USER'])) {
    echo $_SERVER['PHP_AUTH_USER'] . ":" . $_SERVER['PHP_AUTH__PW'] . "@";
?>subdomain.example.com/some/path/resource">Resource</a>

Выше не проверено, но идея состоит в том, чтобы отправить учетные данные в URL, как это:

https://user:password@domain.com/path/to/resource

Прелесть в том, что вы даже не ограничены поддоменами.Я могу придумать много умных способов автоматизировать переписывание этого URL, поэтому вам не нужно делать это вручную для каждой ссылки на вашем сайте.

0 голосов
/ 06 мая 2011

Вы не хотите setcookie; все, что вам нужно, - это скопировать заголовок аутентификации:

header('Authorization: " . $_SERVER['AUTHORIZATION']);

Дайте мне знать, если это работает.

РЕДАКТИРОВАТЬ: Ох. Забудь про это. Я думал, что вы прокси Да, с этим ничего не поделаешь: вы не можете повлиять на заголовок авторизации для второго домена со стороны сервера в первом домене.

...