2009-08-05 4 views
8

У меня есть сервер разработки с IIS 7.0 с веб-приложением ASP.NET MVC, который аутентифицируется с использованием проверки подлинности/членства в формах.IIS7 - Сервер разработки защиты паролем

Мне нужно, чтобы не разрешить неавторизованным пользователям просматривать этот сайт. Однако наши клиенты должны иметь возможность ввести простое имя пользователя/пароль для доступа.

После этого они должны иметь возможность взаимодействовать с веб-приложением с использованием проверки подлинности с использованием форм, как если бы они просто пришли на незащищенный сайт.

Любые предложения?

+2

Это абсолютный отказ/недостаток на стороне IIS7. Массивный случай чрезмерной инженерии и близорукости от Microsoft. Это должно быть однократным нажатием кнопки «Добавить дешевый грязный всплывающий пароль», разделенный на весь сложный инженерно красивый мир сложных модулей аутентификации и дерьма, который они придумали. – Aaron

+0

Удивительно, что количество duds, которые кажутся совершенно готовыми принять это и мириться с этим, написав свои собственные модули обертки и тому подобное. Просто общайтесь с программой. Это должно быть так просто. Я не собираюсь писать какой-либо пользовательский код для реализации всплывающего всплывающего пароля, для которого требуется 2 секунды для настройки. Должен быть простой способ. – Aaron

+0

Рад видеть, что это не только я, у меня эта проблема –

ответ

-1

Мы написали пользовательский модуль для IIS, чтобы автоматически разрешить определенные диапазоны IP, и представить кого-либо еще с диалогом входа в систему. Как только они вошли в систему, он сохранил этот факт в своей сессии и просто передал запросы.

Хорошо работает, может быть применен ко всему на сайтах или службах IIS.

+0

Нет, когда мой провайдер дает мне абсолютно случайный динамический IP каждый раз.Также нехорошо, когда мне нужно предоставить доступ к избранной группе тестировщиков или деловых партнеров, скажем, 50 из них, которым всем нужен доступ к сайту dev. Я не могу заставить их всех тратить час каждый, чтобы ходить по их IP-адресу, потому что они все расположены в разных физических местах, и они - деловые люди, а не технические люди. Они понятия не имеют, как получить свой IP-адрес из своего маршрутизатора/сетевой конфигурации и т. Д. Мне нужно просто отправить их по электронной почте с паролем, чтобы они могли легко попасть на сайт. – Aaron

5

Мой предыдущий ответ сказал, что формы auth и базовые http auth могут жить бок о бок в интегрированном режиме II7. Я был совершенно не прав и с тех пор сделал простое решение.

Использование пользовательских HttpModule вы можете добавить базовую авторизацию по стороне регулярной формы AUTH

public class CustomBasicAuthHttpModule : IHttpModule 
{ 
    private HttpApplication httpApplicationContext; 

    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     this.httpApplicationContext = context; 
     context.BeginRequest += this.OnBeginRequest; 
     context.EndRequest += this.OnEndRequest; 
    } 

    private void OnBeginRequest(object sender, EventArgs e) 
    { 
     // your logic of checking Auth header goes here 
     if (this.httpApplicationContext.Request.Headers["Authorization"] != "Basic base64-encoded-user:pass") 
     { 
      this.httpApplicationContext.Response.StatusCode = 401; 
      this.httpApplicationContext.Response.End(); 
     } 
    } 

    private void OnEndRequest(object sender, EventArgs e) 
    { 
     if (this.httpApplicationContext.Response.StatusCode == 401) 
     { 
      this.httpApplicationContext.Response.AddHeader("WWW-Authenticate", "Basic"); 
     } 
    } 

затем в вашем web.config

<system.webServer> 
    <modules> 
     <add name="CustomBasicAuthHttpModule" type="Namespace.CustomBasicAuthHttpModule, AssemblyName"/> 
    </modules> 
    </system.webServer> 
+0

На самом деле это не так просто в моем случае. Ваше решение было первым, что я пробовал, но каким-то образом «базовая аутентификация» мешает «проверке форм» самого базового нового проекта MVC, как мы все это знаем из Visual Studio/New Project. После аутентификации через «базовую аутентификацию» я перенаправляюсь на URL-адрес для входа по умолчанию, что бы ни старался, и моему браузеру даже не разрешено загружать файл Site.css. Любые идеи ?! – 2009-08-07 14:18:16

+0

Базовая аутентификация IIS не будет иметь ничего общего с аутентификацией форм, совершенно другой. То, как вы сформулировали свой вопрос, показало, что вы хотите заблокировать доступ к любой странице входа в систему для всех, кроме ваших клиентов, но после прохождения запроса IIS они вошли в систему через проверку подлинности форм. Я не знаю, как выполнить проверку подлинности IIS от имени sql-форм, извините. Думаю, я тоже не понимаю, что не так с проверкой подлинности форм, почему лучший ответ IIS лучше? – JeremyWeir

+0

Ты совершенно не прав, яйдуб. Вопрос был хорошо объяснен, и это очень распространенное требование. В самом IIS говорится, что «базовая аутентификация не может использоваться с любым методом аутентификации на основе переадресации, такой как проверка подлинности форм». «Аутентификация Windows» также имеет одинаковую оговорку. Вы можете использовать как базовую, так и проверку подлинности Windows без проблем, при условии, что вы также не используете аутентификацию форм под управлением приложения. Вопрос ОП является очень законным и общим требованием. – Aaron

2

Я просто сделал это с Helicon Ape. Бесплатная лицензия включает в себя 3 сайта, которые для меня были достаточно хороши.

Если вы используете это на сайте, просто не забудьте проверить, активирована ли лицензия для сайта (меню запуска> helicon> ape> manager, help, license manager).

+0

Для такой простой задачи не требуется дополнительное дополнение третьей стороны. – Aaron

+2

Нет, не следует. Это не значит, что это не так, к сожалению. –

0

Как указывает Аарон, это не так просто в IIS7. Теперь обратная сторона этого старого трюка в лучшем случае небезопасна, и есть лучшие способы сделать это сейчас, и возможность использовать все методы аутентификации со всеми приложениями имеет множество преимуществ. Есть несколько способов обойти это, например:

a) Сохранение сайта разработки за VPN, доступ к которому у ваших клиентов.
b) обратное проксирование сайта и предоставление прокси-серверу аутентификации http.
c) Немного больше будет связано с созданием вашего приложения с демонстрационным режимом. Трюк здесь состоит в том, чтобы включить или выключить его из первого запроса, заданного специальной магической строкой запроса. Проверьте это в Session_Start(), затем пометьте пользователей, которые приходят с ним и получают прибыль.

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