Как перенаправить пользователя на другой сервер и включить учетные данные базовой аутентификации HTTP? - PullRequest
2 голосов
/ 16 июня 2011

У меня есть веб-приложение (C # - ASP.net), которое должно передать пользователя на страницу на удаленном сервере Apache с использованием базовой аутентификации HTTP.Мне нужно иметь возможность передавать имя пользователя и пароль на этот сервер, чтобы пользователи, прошедшие проверку подлинности моим приложением, могли беспрепятственно использовать другое приложение без запроса ввода учетных данных, которых у него нет.Передача должна быть безопасной, поскольку обе системы требуют SSL, если имя пользователя и пароль не указаны в сценарии на стороне клиента.Есть ли способ сделать это?

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

Основные данные аутентификации кодируются в заголовке запроса с именем «Авторизация» от клиента. Заголовок содержит закодированный в base64 результат «имя пользователя: пароль».

например. Аладдин: открытый кунжут = Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Более подробную информацию можно найти на странице Базовый доступ Auth википедии .

Для базовой аутентификации заголовок Авторизация должен быть добавлен к каждому запросу. Обычно браузер позаботится об этом после того, как пользователь введет свои учетные данные в диалоговое окно, представленное браузером. Если вы не хотите, чтобы ваши пользователи вводили эти учетные данные, то вашему серверу ASP.net нужно будет находиться между пользователем и сервером Apache (действующим в качестве обратного прокси-сервера), добавляя заголовки аутентификации в каждый запрос, который он передает от имени ваши пользователи.

Невозможно просто один раз зайти на ваш сервер и добавить для него «токен» в запрос, а затем перенаправить на сервер apache. Такой подход был бы возможен, если бы вы использовали формы / файлы cookie для аутентификации, а ваши серверы представлялись пользователю как в пределах одного домена (например, asp.domain.com & apache.domain.com), тогда файл cookie авторизации можно было бы установить на родительский домен (например, domain.com) и общий - см. Аутентификация с помощью форм для поддоменов .

Предполагая, что базовую схему аутентификации на сервере Apache нельзя легко изменить, похоже, что обратный прокси - лучший вариант. В обратном прокси-коде HttpWebRequest - это средство для создания каждого запроса к серверу apache и добавления к нему дополнительных заголовков аутентификации.

.net будет иметь дело с кодированием учетных данных в прокси-запросе, используя что-то вроде:

RemoteServer remoteServer = new RemoteServer(httpContext);
HttpWebRequest request = remoteServer.GetRequest();
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(UserName, SecurelyStoredPassword);
0 голосов
/ 16 июня 2011

Единственное, о чем я могу подумать - если страница не вылезает наружу, загрузите страницу своего сайта в рамку, отправьте ей данные + элементы управления через javascript, чтобы она отправляла логин и так далее. Может быть выполнимо.

0 голосов
/ 16 июня 2011

Попробуйте использовать формат URL https://username:password@example.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...