Подтвердить что ты не робот

Базовая проверка IIS7 для защиты сайта, использующего проверку подлинности

Это должно быть намного проще, чем это оказалось!

У меня есть веб-приложение ASP.Net, которое использует аутентификацию FORMS для защиты части сайта (т.е. области входа в членство).

Теперь я просто хочу поместить традиционное/простое всплывающее окно браузера (безопасность каталога) на весь сайт, потому что мы его тестируем и не хотим, чтобы кто-нибудь спотыкался по сайту и просматривал незавершенную версию и т.д.

Это было очень просто в более старых версиях IIS.

У меня "установлена ​​базовая аутентификация" (поскольку IIS7 не выходит из коробки с этим сейчас). Но когда я включаю его, он говорит мне, что я не могу включить это в то же время, что и любая аутентификация на основе переадресации (это то, что использует моя аутентификация FORMS).

Так что просто глупо.

Должен быть простой способ просто поместить дешевый всплывающий пароль на весь сайт, не влияя на другой метод проверки подлинности, который вы настроили внутри web.config для реального приложения.

Большое спасибо..

ОБНОВЛЕНИЯ Ограничения доступа к IP-адресу не подходят для нескольких причин:  - Мой IP динамичен и поэтому постоянно меняется.  - Я не хочу беспокоить всех, кто должен видеть сайт, попросив их открыть консоль на своей машине и выработать свой IP-адрес или проверить свой маршрутизатор и т.д. Многие из них являются нетехническими бизнес-пользователями, и это будет возьмите их на час, чтобы определить свой IP-адрес.  - Оба базовых auth и windows auth не позволяют подписи под базовыми формами оставаться внизу.

То, что мы, кажется, имеем здесь, - это массовый случай, когда Microsoft пытается переусердствовать над вещами, и в результате более простые вековые требования уже невозможно или легко достижимы. Это должно быть возможно каким-то образом... ЛЮБОЙ???

4b9b3361

Ответ 1

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

Пока единственное, что у меня работает, это то, что я хочу, это Helicon Ape. Я запускаю пробную версию и до сих пор так хорошо.

Стандартный файл .htaccess в корневом каталоге.

AuthUserFile c:\fakepath\.htpasswd
AuthType Basic
AuthName "SITE SECURITY"
Require valid-user

Пользователь .htpasswd, чтобы добавить имя пользователя и пароль: username:encryptedpassword.

Ответ 2

То, что вы описываете, является ограничением ASP.NET по умолчанию, оно построено только для запуска одного модуля аутентификации за раз. Решение состоит в том, чтобы создать собственный IHttpModule, который выполняет вашу собственную проверку подлинности, и в случае успеха передаст запрос ASP.NET, который продолжает использовать Формы.

Ниже приведена базовая реализация такого модуля. Он вернет 401 Unauthorized и попросит пользователя войти в область WOPR. Затем он будет принимать пароль Joshua, игнорируя указанное имя пользователя.

Скомпилируйте это как отдельную сборку и добавьте ее в свой web.config в разделах system.web/httpModules и system.webServer/modules. Никакой другой модификации вашего веб-приложения не требуется.

using System;
using System.Text;
using System.Web;

namespace Research {
    public class AuthenticationModule : IHttpModule {
        public void Init(HttpApplication app) {
            app.BeginRequest += (sender, e) => {
                if (!Authenticate(app.Context)) {
                    app.Context.Response.Status = "401 Unauthorized";
                    app.Context.Response.StatusCode = 401;
                    app.Context.Response.AddHeader("WWW-Authenticate", "Basic realm=WOPR");

                    app.Response.ClearContent();
                    app.Context.Response.End();
                }
            };
        }

        public void Dispose() {
        }

        public static Boolean Authenticate(HttpContext context) {
            var authHeader = context.Request.Headers.Get("Authorization");
            if (String.IsNullOrEmpty(authHeader))
                return false;

            if (!authHeader.StartsWith("Basic "))
                return false;

            var base64Credentials = authHeader.Substring(6);
            var binaryCredentials = Convert.FromBase64String(base64Credentials);
            var asciiCredentials = Encoding.ASCII.GetString(binaryCredentials);
            if (!asciiCredentials.Contains(":"))
                return false;

            var credentials = asciiCredentials.Split(new[] { ':' }, 2);
            return credentials[1] == "Joshua";
        }
    }
}

Ответ 3

Существует простое решение для вас, так как вы хотите использовать аутентификацию FORMS...

  • Добавьте этот раздел в свой web.config под основным заголовком. Не сливайте его - просто скопируйте его как один блок. Тег location будет изолировать эти правила от остальной части web.config и позволить его легко удалить позже.

     <location allowOverride="false">
                 <system.web>
                     <authentication mode="Forms">
                         <forms loginUrl="frontdoor.aspx" name=".ASPXFORMSAUTH">
                         </forms>
                     </authentication>
                     <authorization>
                         <deny users="?" />
                     </authorization>
                 </system.web>
             </location>
    
  • Создайте страницу под названием "frontdoor.aspx". Получите содержимое этой страницы aspx по этой ссылке: http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx (прокрутите вниз до места, где говорится: "Чтобы создать страницу входа в систему" )

  • ВСЕ СОВЕРШЕННО! Это заблокирует весь сайт и позволит вам указать имя пользователя и пароль (я вызываю этот процесс "блокировка входной двери" ) для входной двери независимо от остальной части сайта. Учетные данные входной двери указаны в файле передней двери (не очень безопасно, но достаточно хорошо для того, что вам (нам) нужно) в этом условном:

    [Строка 6:]

    If ((UserEmail.Text = "TheSharedFrontDoorLogonName") And (UserPass.Text = "AndItsPassword")) Then
    

Измените условное условие в соответствии с вашими потребностями, а затем отправьте по электронной почте своим клиентам/бизнес-типам учетные данные на входную дверь.