#c# #networking #proxy #network-programming
#c# #сеть #прокси #сетевое программирование
Вопрос:
Я знаю, многие из вас подумают, что мои вопросы уже заданы и на них даны ответы, но я просто хочу обсудить множество вариантов, которые я попробовал.
Теперь моя настройка такова. около 50 клиентов, работающих под управлением Windows xp professional. Один сервер под управлением Windows server 2003. назовите это сервером A, на котором в качестве прокси-сервера используется squid, а в ОС Linux. назовите это сервером B, на котором работает Apache (хотя и сервер wamp). назовите это сервером C. теперь клиенты входят в домен с помощью Windows active Directory, а сервер домена — сервером A. теперь браузеры настроены на использование прокси-сервера, который является сервером B.
Прокси-сервер был настроен так, чтобы не разрешать загрузки, превышающие ограничение (т. Е. 100 Мб в моем случае). и когда клиент делает запрос, превышающий лимит, пользователю отображается страница ошибки.
Теперь я заменил страницу ошибки, и она перенаправляет пользователя на мой веб-сайт, который запущен на компьютере C. Мне также предоставлена ссылка, к которой пользователь пытался получить доступ. Теперь, что мне нужно, чтобы выяснить, какой пользователь был авторизован в системе. таким образом, я могу загрузить файл, а затем уведомить соответствующего пользователя о завершении загрузки.
Теперь то, что я мог бы сделать, это просто запросить имя пользователя или адрес электронной почты и т.д… но я хочу избавить пользователя от необходимости вводить его имя снова.
Я попробовал следующие варианты.
- .NET http://www.codeproject.com/KB/cs/getusername.aspx (не сработало. может быть, я что-то пропустил)
- wmic http://www.robvanderwoude.com/ntadmincommands.php#Cmd02 ( сработало)
- аутентификация через squid (ldap, active directory и т.д.)
теперь у меня есть вопросы по этому поводу.
- Все ли эти параметры у меня есть или я что-то упускаю?
- почему не .СЕТЕВОЙ вариант работает?
- Я могу использовать любой из различных методов аутентификации squid, но, я думаю, всем потребуется, чтобы пользователь вошел в систему хотя бы один раз после входа на компьютер. Я не хочу этого. есть ли способ, которым я могу просто использовать аутентификацию, выполняемую при входе пользователя в систему, и не запрашивать у него имя пользователя и пароль снова?
Ответ №1:
Для того, чтобы получить логин пользователя в домене, в ASP.Вам нужно использовать сетевое приложение Request.ServerVariables("logon_user")
.
Однако есть и другие соображения:
1) У вас должна быть включена проверка подлинности Windows только для веб-сайта.
2) Браузеры вашего пользователя (предполагая IE) должны быть Enable Integrated Windows Authentication
включены.
3) Если запрос от браузера к вашему ASP.Сетевое приложение является косвенным (т. Е. более 1 перехода), тогда вам нужно будет убедиться, что все задействованные системы настроены на аутентификацию Kerberos (что может быть очень «сложным»).
Вы также могли бы настроить ASP.Net выдавать себя за конечного пользователя, что позволило бы вашему исходному коду работать правильно. Однако это означает, что все, что происходит в потоке (доступ к базе данных, доступ к файлам и т.д.), Будет выполняться от имени конечного пользователя.
Комментарии:
1. Спасибо за ваш ответ. просто для ясности. это даст мне имя пользователя текущего зарегистрированного пользователя, который заходил на мой веб-сайт. Я использовал System. Безопасность. Принципал. WindowsIdentity. GetCurrent().Name для получения имени пользователя клиента. когда я открыл веб-сайт на том же компьютере, на котором был запущен IIS, я получил имя пользователя текущего зарегистрированного пользователя. но когда я заходил на сайт с другого КОМПЬЮТЕРА, имя пользователя было чем-то другим.
2. GetCurrent().Name выдаст вам имя исполнителя потока; если у вас включено олицетворение идентификатора, то это «может» быть конечный пользователь. Если вы этого не сделаете, тогда это будет ASP. Идентификатор пула сетевых приложений.