Что такое код asp anonymoususername


Содержание

Лекция 1. Что такое ASP.NET. Инсталляция и тестовый проект.

Введение

Microsoft .NET Framework — это платформа для создания, развертывания и запуска Web-сервисов и приложений. Она предоставляет высокопроизводительную, основанную на стандартах, многоязыковую среду, которая позволяет интегрировать существующие приложения с приложениями и сервисами следующего поколения, а также решать задачи развертывания и использования интернет-приложений. .NET Framework состоит из трех основных частей — общеязыковой среды выполнения (common language runtime), иерархического множества унифицированных библиотек классов и компонентной версии ASP, называемую ASP.NET.

ASP.NET – это часть технологии .NET, используемая для написания мощных клиент-серверных интернет приложений. Она позволяет создавать динамические страницы HTML. ASP.NET возникла в результате объединения более старой технологии ASP (активные серверные страницы) и .NET Framework. Она содержит множество готовых элементов управления, используя которые можно быстро создавать интерактивные web-сайты. Вы также можете использовать сервисы, предоставляемые другими сайтами, прозрачно для пользователей вашего сайта. В общем, возможности ASP.NET ограничены только вашим воображением.

Давайте обсудим, что такое динамические страницы HTML и чем они отличаются от статических. Статическая страница содержит код на языке гипертекстовой разметки HTML. Когда автор страницы пишет ее, он определяет, как будет выглядеть страница для всех пользователей страницы. Содержание страницы будет всегда одинаковым независимо от того, кто и когда решит ее просмотреть. Языка HTML вполне достаточно для отображения информации, которая редко изменяется и не зависит от того, кто ее просматривает. Страница HTML — простой ASCII-текст, следовательно, клиент может работать в любой операционной системе.

Совершенно понятно, что если сформировать web-страницу, описав ее структуру средствами HTML, она будет совершенно статична в смысле содержимого. То есть при просмотре в браузере она будет нести в себе точно ту же информацию, что была в нее записана в момент создания, и переданные пользователем данные не могут быть использованы для модификации содержимого отображаемых ему страниц: он сможет увидеть только то, что предварительно было записано в конечный набор файлов.

Но что, если мы хотим отобразить на странице текущий курс евро или прогноз погоды? Если мы написали страницу HTML вчера, сегодня она уже устареет. Следовательно, мы должны уметь создавать динамические страницы. Динамическое наполнение страницы – это информация, содержание которой определяется тем, кому она предназначена, и которая отличается от просмотра к просмотру. Оно позволяет обеспечить двусторонний обмен информацией – от клиента к серверу и обратно.

Динамическими принято называть web-страницы, которые перед отправкой клиенту проходят цикл обработки на сервере. В самом простом случае это может быть некоторая программа, которая модифицирует запрашиваемые клиентом статические страницы, используя параметры полученного запроса и некоторое хранилище данных. Даже при такой примитивной организации «неразрешимая» задача из предыдущего абзаца обретает очевидное решение: достаточно подготовить всего одну статическую страницу – шаблон – и перед отправкой страницы программно подставлять в него значение, полученное сегодня из банка или метеобюро.

Большинство страниц на ранних стадиях развития интернета были статическими. Последние 10 лет растет количество динамических страниц. И это понятно, пользователи интернет хотят не только читать готовую информацию, а быть активными действующими лицами. Например, они заказывают товары в интернет-магазине, пишут дневники, участвуют в конкурсах. Информационные порталы обновляют новости каждую минуту. Динамические страницы могут подстраиваться под конкретного пользователя, а также реагировать на его действия в браузере. Каким же образом? Для этого придумано множество технологий. Например, того, чтобы идентифицировать пользователя и сохранить его настройки для данного сайта, применяются файлы-cookies.

Существуют языки, способные динамически изменять содержимое веб-страницы. С одной стороны, это языки скриптов, выполняющиеся непосредственно у клиента. Примеры скриптовых языков — JavaScript и VBScript. Скрипты на этих языках встроены в код HTML, который сервер посылает браузеру. Сценарии, выполняемые на стороне клиента, выделяются тегами и . Браузер интерпретирует этот код и показывает пользователю результат. Сам код можно просмотреть через View Source браузера. Естественно, эти программы не могут быть большими. Например, если нужно выполнить поиск в базе данных, мы не может отправить пользователю все ее содержимое. Но скрипты могут проверить правильность запроса, введенного в форму, тогда не придется перезагружать сервер обработкой неправильных запросов. Некоторые программисты создают на JavaScript анимационные эффекты. Одна студентка intuit.ru желала найти скрипт, который бы отправлял SMS-сообщения. Увы, это невозможно. Выполняемых на стороне клиента сценариев недостаточно для создания полноценных динамических страниц. Даже если на странице используется JavaScript, анимированные картинки .gif, она называется статической.

Динамическая веб-странице должна быть создана «на лету» программой, исполняющейся на интернет-сервере. Широко применяются механизм шлюзов CGI(Common Gateway Interface). Вначале пользователь получает статическую страницу с формой. Вам известно, что в теге FORM существует атрибут ACTION. Именно он задает адрес (URL) исполняемого приложения. На сервере находятся исполняемые файлы программ, написанных, например на C/С++ или Дельфи, которые по протоколу HTTP принимают данные из входного потока или из переменных окружения и записывают в стандартный выходной поток готовую страницу.

Пользователю в ответ на запрос посылается HTML код, который был специально сгенерирован для него. Это может быть, например, результат поиска в поисковой системе. CGI -скрипты могут быть написаны на интерпретируемом языке (Perl) или даже скрипте командной строки. Входной и выходной потоки переназначаются. На вход интернет-сервер принимает данные, введенные пользователем. После обработки полученных данных, пользователю возвращается результирующая страница. При исполнении cgi-программа загружается в память сервера, а при завершении – удаляется. Когда 100 клиентов одновременно обращаются к серверу, в памяти создаются 100 процессов, для размещения кода каждого из которых нужна память. Это отрицательно сказывается на масштабируемости. Напомним, что масштабируемость — это возможность плавного роста времени ответа программной системы на запрос с ростом числа одновременно работающих пользователей.

Для решения это проблемы Microsoft была предложена альтернатива – ISAPI(Internet Server Application Programming Interface)-расширения и фильтры. Вместо исполняемых файлов используются DLL – библиотеки. Код DLL находится в памяти все время и для каждого запроса создает не процессы, а нити исполнения. Все нити используют один и тот же программный код. ISAPI –приложение выполняется в процессе IIS-сервера. Это позволяет повысить производительность и масштабируемость.

ISAPI-расширения можно создавать в Visual Studio C++ 6.0, пользуясь мастером.

У ISAPI тоже есть недостатки, относящиеся к разработке. Если мы меняем исходный код dll, мы должны его откомпилировать и поместить в исполняемую директорию сервера. Но так как предыдущий вариант dll находится в памяти, необходимо остановить сервер, чтобы получить доступ на изменение файла. В это время клиенты не смогут получить в сервера ни один документ, и, конечно, будут не удовлетворены.

Скриптовые языки, исполняющиеся на стороне сервера – php и asp. Технология asp была разработана Microsoft в 90-х годах.

Выполнение кода asp поддерживается ISAPI-расширением сервера. В диалоге конфигурации сервера IIS определяются способы обработки файлов с различными расширениями. Для обработки URL-адреса с расширением в установках сервера определен файл asp.dll. Файлы asp отправляются к нему на обработку. На вход поступает asp, а на выходе имеем поток HTML-кода.

Пример файла asp:

Тег сигнализирует asp, что в нем находится код, который он должен обрабатывать на сервере. Выполняется скрипт на языке, который указан в директиве Language. Оператор Response.Write записывает текст в выходной поток сервера, таким образом, он становится частью HTML-страницы, отправленной пользователю.

Технология asp была ограничена по своим возможностям. Он использовал скриптовые языки, которые имеют меньше возможностей, чем полнофункциональные языки программирования. Код asp был встроен в HTML в виде специальных тегов, что создавало путаницу. Кусочки asp были разбросаны по нему, как изюм в булке. Но HTML код обычно создают дизайнеры, которые умеют «делать красиво», а asp – программисты, которые заставляют все это работать. В ASP.NET вы можете держать код asp и HTML в разных файлах.

Скриптовые языки не поддерживают строгую типизацию. Что это значит? Вы можете не описывать переменную до ее использования и можете присваивать ей значения разных типов. Это удобно, но создает почву для ошибок. Например, у вас есть переменная x1, и вы присваиваете ей значение 1, но вы сделали опечатку и по ошибке написали x2=1. Будет создана новая переменная x2, а значение x1 не изменится. В языке со строгой типизацией компилятор заметит, что переменная x2 не описывалась, и выдаст ошибку.

В 2000 году на конференции разработчиков в качестве части новой технологии .NET Microsoft представила ASP+. С выходом .NET Framework 1.0 она стала называться ASP.NET.

ASP.NET — это не продолжение ASP. Это концептуально новая технология Microsoft, созданная в рамках идеологии .NET. В ASP.NET заложено все, для того, чтобы сделать весь цикл разработки веб-приложения более быстрым, а поддержку более простой. ASP.NET основана на объектно-ориентированной технологии, но сохранила модель разработки asp: вы создаете программу и помещаете ее в директорию, выделенную сервером, и она будет работать. В ASP.NET появилось много новых функций, а существовавшие в asp значительно усовершенствованы.

В ASP.NET используются компилируемые языки. Во время компиляции проверяется синтаксическая корректность исходного текста. Скомпилированный в промежуточный язык код выполняется быстрее, и он будет таким же независимо от языка, который мы используем. Компилируемые языки поддерживают строгую типизацию.

Компиляция происходит на сервере в момент первого обращения пользователя к странице. Если программист изменил текст страницы, программа перекомпилируется автоматически. При написании кода можно использовать набор компонентов, поставляемых с .NET.

Платформа .NET Framework предоставляет приложениям среду выполнения, сама непосредственно взаимодействуя с операционной системой. Выше лежит интерфейс ASP.NET приложений, на котором в свою очередь базируются веб-формы (ASP.NET страницы) и веб-сервисы. Интерфейс .NET Framework позволяет стандартизировать обращение к системным вызовам и предоставляет среду для более быстрой и удобной разработки. CLR обеспечивает единый набор сервисов для всех языков.

ASP.NET использует технологию доступа к данным ADO.NET, которая обеспечивает единый интерфейс для доступа к базам данных SQL Server и файлам XML. Кроме того, усиленная модель безопасности позволяет обеспечивать защиту клиента и сервера от несанкционированного доступа.

В 2004 году появилась версия ASP.NET 2.0(бета-версия, окончательный выход – конец 2005-начало 2006). Как утверждается, эта версия позволяет сократить объем кодирования на 70%. Новые возможности версии 2.0 – например, использование шаблонов дизайна страниц(Master Page), упрощенная локализация Web-приложений, более 50 новых серверных элементов управления. Цели, которые преследовали разработчики новой версии – повысить скорость разработки сайтов, масштабируемость, легкость поддержки и администрирования сайтов, скорость работы сервера. Появилась панель остнастки MMC (консоль управления Microsoft), предоставляющая графический интерфейс для управления настройками ASP.NET. Изменять настройки проекта теперь можно и через web-интерфейс. ASP.NET 2.0 поддерживает работу на 64-битных процессорах. Сервис персонализации (personalization) предоставляет готовое решение для хранения персональных данных, непосредственно характеризующих пользователя сайта, так называемого профиля пользователя (Profile).

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

Предыдущие версии Visual Studio для проектов ASP.NET требовали наличия на машине разработчика сервера IIS. Теперь сервер встроен в среду разработки.

ASP.NET 2.0 и Visual Studio 2005 предоставляют инструменты для легкого построения локализируемых сайтов, которые определяют предпочитаемый язык пользователя и посылают ему страницы на его языке.

Возможность прекомпиляции позволяет обнаружить ошибки до загрузки страниц на сервер. Можно не хранить на сервере исходные страницы aspx, тем самым защищая свою интеллектуальную собственность.

В ASP.NET 2.0 встроена технология автоматического обновления кэширования баз данных. Данные, полученные из базы, хранятся на сервере и он не обращается к базе для обработки повторного запроса. При изменении базы данных кэш обновляет свое содержимое.

ASP.NET — это технология, а не язык, и позволяет программировать на разных языках – С#, Visual Basic, J#. В платформе .NET все языки равны, но некоторые равнее(Дж. Оруэлл). Вот таким языком и является С#, потому что он был специально создан для этой платформы. Программирование C# позволяет в полной мере использовать концепции, методы и паттерны объектно-ориентированной разработки. Язык Visual Basic 8.0 наделен почти теми же возможностями. Чтобы научиться ASP.NET, вам нужно знать основы HTML, а знание asp не обязательно. Оно может даже помешать, так как придется менять образ мышления. Также для понимания многих желательно знать CSS и JavaScript.

Процесс инсталляции

ASP .NET 2.0 можно установить на компьютерах с ОС Windows 2000 с Service Pack 4, Windows XP с Service Pack 2 и более поздними версиями Windows. Готовые сайты предпочтительно устанавливать на Windows Server 2003.

Для разработки приложения можно использовать любую среду разработки или даже текстовый редактор, при условии, что у вас есть доступ к IIS. Если же вы хотите воспользоваться всей мощью Microsoft .NET Framework и ASP.NET и при этом, затратить как можно меньше усилий, то нужно воспользоваться средой разработки, специально разработанной для программирования ASP.NET 2.0.

Если вы приобретете Visual Studio .NET 2005, то для работы достаточно будет только его. .NET Framework содержится на дисках. В его состав входит Visual Web Developer, который позволяет создавать профессиональные веб-приложения, а также desktop-приложения на разных языках программирования. Продукты Microsoft выпускаются на DVD, но есть набор из двух CD от «Мегасофт». Visual Studio .NET 2005 требует около 2 Гигабайт дискового пространства. При этом инсталлируется ASP.NET 2.0, среда разработки, SQL Server Express, встроенный веб-сервер, Crystal Reports со специальными элементами управления для ASP.NET 2.0.
Бесплатно распространяемое программное обеспечение.

Visual Web Developer 2005 Express Edition – свободно распространяемая среда предназначенный для новичков и студентов, доступная по адресу http://msdn.microsoft.com/vstudio/express/vwd/. Список отличий VWD от Visual Studio.NET 2005 невелик и для начинающих несущественен, он приведен здесь: http://msdn.microsoft.com/vstudio/products/compare/default.aspx

Инсталлятор VWD имеет объем 2,8 Мб, но в процессе инсталляции он загрузит еще 40 Мб и 80 Мб, если захотите установить документацию. При этом также будет установлен .NET Framework с ASP.NET 2.0.


Системные требования – процессор с минимальной скоростью 600 МГц, 128 МБ памяти и 1.3 ГБ дискового пространства. После инсталляции нужно будет зарегистрировать свою установку, это совершенно бесплатно.

В качестве среды разработки вы можете выбрать WebMatrix. Эта программа совмещает в себе редактор и http-сервер. Ее можно загрузить на http://www.asp.net/WebMatrix.

У WebMatrix инсталлятор размером всего 1.2 Мб, но у него меньше возможностей, чем у VWD. Но, в общем, эти среды разработки похожи. У WebMatrix есть неприятная особенность – она дает запрос на сохранение во время закрытия файлов, которые не редактировались. VWD Express позволяет одним нажатием кнопки открыть Web-интерфейс конфигурирования проекта. В VWD работает технология IntelliSense, которая автоматически предлагает возможные в данном месте элементы кода.

Если вы решили работать с WebMatrix, вы должны установить на своей машине .NET Framework 2.0 и ASP.NET 2.0.

Если у вас операционная система Windows Server 2003, то .NET Framework уже предустановлен. Вы можете проверить, есть ли вас директория %WINSDIR%Microsoft.NETFramework. Если нет, вы можете ее загрузить на сайте Microsoft. Последние версии находятся по адресу http://msdn.microsoft.com/netframework/downloads/updates

На данный момент это .NET Framework 2.0, но к моменту, когда вы будете читать эту лекцию, могут появиться более новые версии. Вы можете скачать новую версию, даже если у вас уже есть другая. Они будут существовать на компьютере одновременно в поддиректориях %WINSDIR%Microsoft.NETFramework, с именем, соответствующим номеру версии. Можно сказать, что каждая версия представляет собой сборку. Система версий поддерживается для всех приложений, созданных с использованием .NET Framework.

Там вы увидите ссылки на .NET Framework для разных архитектур компьютера.

При желании загрузите .NET Framework Version 2.0 SDK, которая содержит наряду с .NET Framework Version 2.0 SDK документацию и примеры, которые могут оказаться полезными.

Илон Маск рекомендует:  Что такое код posix_getpgid

По адресу http://asp.net/default.aspx можно найти много полезных для разработчиков программных продуктов, примеров кода и статей.

IIS(Internet Information Server) находится на инсталляционном диске Windows 2000/XP, но предустановлен только на серверах. Его можно установить, зайдя в Control Panel->Add or Remove Programs->Add/Remove Windows Components. Компьютер попросит вас вставить инсталляционный диск.

IIS может понадобиться, если вам нужен полноценный сервер для работы в интернет, а не просто на своем компьютере или в локальной сети или вы решили набирать текст в обычном редакторе. Для работы на своем компьютере во все эти среды разработки встроен сервер Cassini, который первоначально появился как часть WebMatrix. Символ WebMatrix – планета Сатурн, а Кассини — известный исследователь Сатурна. Предыдущие версии Visual Studio требовали наличия IIS, но теперь Cassini встроен и в Visual Studio 2005, что позволяет работать даже в Windows XP Home Edition.

Примеры будут даваться как для WebMatrix, так и Visual Studio. Некоторые примеры требуют VWD Express или Visual Studio.
Сообщества разработчиков.

Через меню помощи Visual Web Developer Express можно зайти на сайты форума по ASP.NET. А вот адреса сайтов на русском языке:

* http://www.aspnetmania.com
* http://www.gotdotnet.ru/
* http://www.sql.ru/
* http://dotsite.ru/
* http://www.rsdn.ru/

Вы можете завести пробный хостинг на http://europe.webmatrixhosting.net/russia/default.aspx.

Первый проект

Вначале решите, в какой директории будете создавать страницы. Все файлы, находящиеся в одной директории, считаются единым проектом.Запустите выбранную вами среду разработки. Выберите пункт меню File-New-Website. Появится диалоговое окно. Назначьте в нем имя проекта и выберите язык программирования С#.

По умолчанию проект создается в файловой системе. По желанию его можно создать на HTTP или FTP-сервере. Из файловой системы проект всегда можно скопировать на сервер нажатием одной кнопки в заголовке Solution Explorer.

В проекте будет создана страница default.aspx. Выберите ее, и появится окно редактирования с закладками Design и Source. Не меняя ничего, щелкните на кнопке со стрелкой, чтобы просмотреть страницу в браузере. Появится окно, котором спрашивается, нужно ли добавить в файл web.config возможность отладки. Нажмите OK. На панели задач должен появиться значок веб-сервера. Откроется браузер, показывающий страницу по адресу http://localhost:номерпорта/Website1/default.aspx. localhost обозначает сервер, работающий на вашем компьютере. Встроенный сервер Cassini сам назначает себе номер порта – для каждого проекта он разный. Сервер IIS обычно работает через порт 80(или 8080, если тот занят), и для него номер порта указывать не нужно. При этом ваша страница будет скомпилирована.

Пока что страница в бразере пустая.

Но исходный код этой страницы не пустой. Программа сгенерировала код для вас.

Troubleshooting Anonymous authentication failures in IIS

Recently I was checking MSDN and KBs for a quick check on troubleshooting anonymous authentication, and sadly I could not find a single article devoted to it (that’s strictly my personal experience). We often get calls on issues related to Anonymous authentication failures and this is something which I feel a user can fix oneself without requiring our support. My aim in this post is to ensure people have a good troubleshooting strategy for anonymous authentication failures.

As with all my posts I won’t get into much of concept building stuffs here on anonymous authentication in IIS; reason again being the same, you will find tonnes of articles on the Net talking about it and I don’t want to be another one.

So in brief Anonymous authentication in IIS is a type of access wherein any user can freely access the site. It’s like a public website open to all.

So let’s get started.

Anonymous authentication uses a local or domain account when user tries to access a webpage in IIS (By default it is of the form IUSR_ ).

All the webpages which have anonymous authentication will use an account in order to access a page, and depending upon whether the account has permission or not the page will be rendered. Typically if anonymous authentication fails, you will see 401.1 in the error page shown by IIS. This means that Anonymous user account for that page doesn’t have necessary permissions to the page or else some other settings like Domain or local policy is restricting the access.

If you have set only anonymous authentication for your web resource (that means no other authentication like Windows integrated or Basic ), and it fails then you will be shown 401.1 directly without any challenge which generally prompts to enter credentials.

Wanna know how IIS negotiates an authentication, check this.

If you want to check the anonymous username being used for a website or a virtual directory, type in this command at the following location:

\Inetpub\Adminscripts>cscript.exe adsutil.vbs get w3svc/anonymoususername

\Inetpub\Adminscripts>cscript.exe adsutil.vbs get w3svc/ /Anonymoususername

\Inetpub\Adminscripts>cscript.exe adsutil.vbs get w3svc/ / /anonymoususername

[If you get the result like: The parameter «anonymoususername» is not set at this node, it means it is inheriting the settings from its parent level.]

If you want to check where all Anonymous username is set at a webserver level, you can type in:

\Inetpub\Adminscripts>cscript.exe adsutil.vbs find anonymoususername

Typically the Anonymous username is in the form of IUSR_ , wherein machinename is the server name.

Although you can set it to a different value by manually changing it. It can be a local account to the server or a domain account.


A caveat here, it’s a security risk if you make anonymous username as part of an Administrator group (remember it allows access to everyone on the net without asking for credentials).

To set an anonymous username at a website level, you can type in:

\Inetpub\Adminscripts>cscript.exe adsutil.vbs set w3svc/anonymoususername (Remember to include quotes around the username). [This setting is at the global level, i.e. for all the websites in the server provided you don’t manually override the settings at a specific website or Virtual directory level]

\Inetpub\Adminscripts>cscript.exe adsutil.vbs set w3svc/ /anonymoususername [At a specific website level]

\Inetpub\Adminscripts>cscript.exe adsutil.vbs set w3svc/ / /anonymoususername [At a specific Virtual directory level in a specific website]

I will move forward with specific issues one by one:

Anonymous user account is locked out:

Ensure that the account is not locked, disabled or expired.

Password Synchronization issues:

I have seen a lot of support calls (I mean a LOT) where password synchronization has been the issue, and this is very very simple to fix.

Anonymous username’s password are stored in two places in IIS 6.0: In the IIS metabase and in the SAM database.

If the password at these places are not synchronized (not same), anonymous authentication will fail. They have to be same.

So do this as the first step in troubleshooting:

1) Find out how many places we have the anonymousername set by following the command I mentioned above. Here I mention it again:

\Inetpub\Adminscripts>cscript.exe adsutil.vbs find anonymoususername

2) If you have it set at multiple places, find out the specific site you are having problem with. Check the anonymous username for it and then check the password.

\Inetpub\Adminscripts>cscript.exe adsutil.vbs get w3svc/ /anonymoususerpass

[You may find the password in encrypted format like ************. In such a case you need to modify the adsutil.vbs file to get the exact password. Open Adsutil.vbs in notepad from the above location and search for the function «IsSecureProperty(ObjectParameter,MachineName)».

In this function IsSecureProperty(ObjectParameter,MachineName), you will find the following code:

On Error Resume Next
Dim PropObj,Attribute
Set PropObj = GetObject(«IIS://» & MachineName & «/schema/» & ObjectParameter)
If (Err.Number <> 0) Then
ReportError ()
WScript.Echo «Error trying to get the property: » & err.number
WScript.Quit (Err.Number)
End If
Attribute = PropObj.Secure
If (Attribute = True) Then
IsSecureProperty = True \Inetpub\Adminscripts>cscript.exe adsutil.vbs get w3svc/anonymoususerpass

Copy the password from here and go to Computer management->System Tools->Local Users and Groups->Users

You should find the username (By default, IUSR_ is used by IIS) [Unless you have Domain controller and Web server running on the same box. In such a case you need to look for the domain user name under Active Directory Users and Computers. I will talk about DC and IIS running on the same box later, this is really important!]

Change the password for Username (or, IUSR_ ), by pasting the password that you got from metabase.

Ideally, if the issue was with Password synchronization your problem should get resolved at this point �� If not, then move on.

NTFS permission for the requested web resource:

NTFS permissions not set properly for the content can also cause 401.1 (although you should typically see 401.3 Access denied due to ACL). Ensure that the page we are trying to access has necessary NTFS permissions for Anonymous username (or the group that anonymous username belongs to). Ensure that Anonymous user account is part of the Users group.

If your issue did not get resolved by Password synchronization, then Local security policy (or, Domain security policy) can be a very probable reason. Please follow the following articles religiously.

Typical reasons being:

— Anonymous username being a part of Guests group (During IIS installation, IUSR_ is added to the Guests group by default), and Guests group being denied access to some web folders and/or denied access because of local/domain policy).

Suggestion: Make sure that either you remove the anonymous username from the Guests group and/or remove the Anonymous username from any of the Deny policy settings (You can do this by going to the Local Security policy->Local Policies-> User rights assignment).

— The account is corrupted because of some reason like corrupted SID, moving the server from one domain to another etc.

Suggestion: First try adding the Anonymous username to the Administrators group to check whether you can access the web page or not. If it works it means it’s an issue most likely with the permission for that account. If it still does not work, then there is some thing wrong..may be Policy settings or a corrupted account. Change the Anonymous user account to a different account and see if it works (be sure to make that account part of IIS_WPG group). If it works then it’s a corrupted account. Recreate the IUSR and IWAM accounts (you can recreate by deleting existing IUSR_machine and IWAM _machine and then doing an IISRESET. IISRESET will recreate the IUSR and IWAM accounts for you) or manually creating a new user.

At times you may see that HTML pages are running fine but not ASP pages. They might throw error like 401.3 etc. Check whether Users group has permission on ASP.dll at the \wind*\system32\inetsrv folder.

Now something that creates confusion among a lot of people. At times people see their anonymous account getting locked intermittently and there seems to be no valid explanations for it.

Scenario: You have set anonymous username at multiple levels in IIS.

Let’s say you have different usernames at the following level:

Global Web Sites level

Now, let’s assume you have different passwords at different levels. Now in the SAM database you can have only one instance of an account and hence only one password for it. Let’s say you accidentally change the password for IUSR_m2 in the metabase at Website1 ->VD2 level and forget to change the password at the Website1, Website1->VD3 and/or Website2 level. Now since the password has to match in the SAM metabase too, only one of these will work. Also by mistake a wrong password can be set at a given level.

1) If you changed IUSR_m2’s password in the SAM database to reflect Website1->VD2, then Anonymous authentication works fine when you access a resource from Website1->VD2. Although now, anonymous authentication will fail when you access a resource from any of Website1, Website1->VD3 or Website2 levels.

2) If you have the IUSR_m2’s password in the SAM metabase reflecting the password set at any of Website1, Website1->VD3 and Website2 (assuming all of them have same password for simplicity sake), then anonymous authentication will succeed when you access a resource from any of the above levels, but will fail when you access a resource from Website1->VD2 level.


Now most servers have an Account lockout policy after certain invalid logon attempts. So if users try to access the Web resources from different levels, at one point of time because of multiple attempts Anonymous user account will get locked out and this will block access from all the levels irrespective of the matching passwords in Metabase and SAM database.

So IUSR_m2 might get locked intermittently because of the above scenario and will give unpredictable results. That’s why I recommend to use a single Anonymous username at the global level only and let all the websites inherit from there,or else use completely distinct accounts at various levels (it again finally depends upon your requirement specific to the system).

IIS and Domain Controller (DC) on the same server:

Also, if your IIS server is a DC then you need to check:

Please keep this handy when you are troubleshooting issues on a DC for IIS authentication.

Generally, DCs are very restricted when it comes to Permissions and access policies. Hence we have seen a lot of issues related to anonymous authentication failures on DCs. Microsoft recommends not to use a machine both as a DC and an IIS server from Security and Performance perspective.

I have encountered a more frustrating problem.

The anonymous authentication is OK, when the IIS is just restarted. I can see the web page, and the «Authenticaion and access control diagnostic» tool also shows that the IUSR_myMachineName account is fine.

However, after running a few minutes, troubles start to show up in the «Authenticaion and access control diagnostic».

The IUSR_myMachineName is found without the privilege for «access this computer from the network».

Depending on my luck, I could still access the webpage while this diagnostic error is shown.

But eventually, the web page becomes unaccessible, with an HTTP error 401.1, as described in this article.

What could have messed up the IUSR_myMachineName account after IIS has been in operation for a while?

Hi David, Is the IIS server also a Domain controller by any chance. If yes, then we have seen such issues because of restrictive policies.

One of the most probable reason why you are seeing such a behavior is because of domain group policy being applied to the server. Please check whether domain policies are causing IUSR account to be removed from «access this computer from the network».

This post was of a great help to us .Thanks…

We were really in a fix when weird things were happening at the production server where as in the testing environment everything seemed just perfect…

Glad this post was of some help.

Just want to say thanks. I scoured all ends of the Internet trying to fix my 401.1 errors.

You explained all the potential pitfalls and covered pretty much everything possible.

The fix for me was a combination of syncing the pw, and also removing the guest group from the IUSR group.

Thanks for the help. Removing IUSR from the Guests group was the trick for me.

Thanks, this was a great help. Turned out to be the Guests group for us as well.

I had a problem getting anonymous authentication to work using a domain account. I checked everything and the password was synchronized, the permissions were correctly set, local security policy was as it should be, but still I could not authenticate. The problem turned out to be that I did not have application pools enabled in iis 6. When I unchecked the option to use iis 5 isolation mode, the default application pool was created automatically and then everything started working (it also made iis run as «NETWORK SERVICE» instead of «ASPNET», so I did have to tweak some permissions). Just wanted to let you all know so you don’t spend 3 days banging your head against the wall like I did. Another tip: download the authdiag.exe authentication diagnostic tool from microsoft, it helped me narrow in on the problem. Good luck!

Илон Маск рекомендует:  Что такое код ereg_replace

We often get support calls on issues related to Anonymous authentication failures and this is something

Thanks a lot dude, this is really helpful.

Terrific help – after 8 lost hours, you gave me back the will to live. A big THANK YOU.

I am facing typical problem. I had unfortunately installed Active directory on my server (windows 2003) on which I have IIS, and thus, the new domain created stopped all my applications. Because of which I had to uninstall AD, after which I joined my machine back to old domain. But now am unable to connect my websites, the IIS is not working properly. I restarted the iisadmin service, rebooted machine several times. After removing domain controller, if IUSR and IWAM a/cs are removed, then what is the solution to it. The last thing I can do is reinstall IIS, but I want to keep it the last one, as then I would need to reinstall sharepoint on my machine again. My email id is xxxxxxxxxxxxxxxx please help me out if you can, its urgent for me.

Just to answer the previous comment, adding here for everyone.

In case for some reason you see that IUSR and IWAM account are not present on the computer (or got deleted for some reason), you can recreate this automatically by doing an IISRESET (start->run->iisreset).

If that dones’t work for you form some reason you can manually recreate them as normal user accounts.

I have a html page testagain.html which is simple javascript to execute an executable.

This executable gets a 401.3 error 100% of the time.

I have looked at just about everything in the world to try and correct this issue.

The authdiag gives me two warnings with the following paths: w3svc Authtype: anonymous and w3svc/8/root/ Authtype: anonymous

Under user rights, iusr_aztech is a successful reply.

I have moved Iusr_atech out of the guests and into users and, temporarly the Administrator account. Still does not work.

The program, TXPRC.exe is tied to 5 files which I have checked and rechecked to insure that all of the files have the correct permission entry.

I have reloaded and changed the passwords using the cscript and reset all the permissions according the MS permission process.


Still get the 401.3

Any other ideas would be very helpful.

401.3 is an ACL issue and not authentication. I would suggest you to run Procmon from http://www.sysinternals.com while you are trying to reprodice the issue. Search in the Procmon log whether there is an «ACCESS DENIED». It most probably could be a permission issue for Network Service or some other account under which your exe is trying to run.

Also if this is IIS 6.0 running under worker process isolation mode, you may want to test it by running your app pool under LOCAL SYSTEM account and see if the issue still appears.

Let me know if that helps.

Oh my God…. I can’t believe I could have overlooked something so simple…. I’d get my web pages working just how I wanted, and then they’d start prompting for a password all of a sudden…. the next day I’d delete the sharepoint site, and re-create it again, and all would seem to work, then later that day, its asking for a password again… It was driving me crazy…. I NEVER thought to check logon hours… .sure enough… it was set to only allow logon 9-5… so I’d work on the silly thing all day, think its working, go home at 5, and try and check it from home that night, and get the password prompt…. just set to allow logon all hours, and so far so good.

I need to create anonomus user of the machine or update with current machine name.

How can i do it?

there are two ways:

a. Ensure there is no IUSR/IWAM_Machienname as of now on the server. go to cmd prompt and type in IISRESET. It will restart IIS services and also recreate IUSR/IWAM accounts.

b. If the above does not result in the account creation go ahead and manually create a local IUSR_machinename account.

You should be good.

I was able to get the password following your advice. Thank you!

But what happens if the anonymous password is corrupt and needs to be wiped out and recreated? Any ideas? Then I can get it and put it back in there. Thanks!

David, sorry was away on a long vacation (was having a ride in Ladakh :-)).

Regarding your question yes you can modify the password for anonymous user account.

>cscript.exe adsutil.vbs set w3svc/anonymoususerpass

*Ensure that when you change the password through the above command the same password is modified in the Local Computer Users mmc console for the account, or domain acct based on the situation. The above cmd modifies the password in the IIS metabase. We need to ensure the password is same in both the IIS metabase as well as SAM database (Local Users and Computers console).

Hope this helps!

Excellent post! I’ve got a question in regards to authentication.

Some users in my domains get locked out of their «home» domain account once they visit an internal website hosted on another domain (seperate forest, but a Trust is set up bewtween domains).

Any change this problem is IIS related?

Dean, based on what you said it may or may not be an IIS issue. It could be some domain policies. We need to know more about what this website does..

I think you might be the expert who can help me. Today I just found I lost my old IUSR_Machinename, instead I have an odd IUSR and IWAM account. My machine name is atllwe, but the IUSR account is something like IUSR_YOUR-92791234. I did an IIS reset, and it’s still like that. I just realized that I couldn’t write to an XML file that was working before. When checking the IUSR account, I realized such a change. Have you seen something like that before? Thanks!

Yes I have seen similar issues in the past, although i cannot pinpoint to a specific issue being the problem. You may see multiple IUSR_ if the machine was upgraded or renamed etc etc. You need not worry about other accounts though. If IISRESET is not working you can manually create the account with whatever name you like and give it the necessary permissions as per KB 812614. Regarding the question around why your cannot write to XML it could be permission issue for the account, may be write permission etc. You can use tools like Process Monitor to check what identity your app is using to write to the XML file etc. You may see Access Denied entry in the process monitor log.

Let me know if this helps.

Is there a similar process for the IWAM_machine_name account? The password for this account expired on the server, and now we’re getting DCOM errors referencing this account and W3SVC warnings.

Thanks so much for this article, by the way. What a great help it has been to me already, dealing with some internal website issues we were having after running the MBSA on some internal web servers.

Thanks Christine for your kind words :).

For IWAM account, you can use synciwam.vbs script to sync the password in the SAM database, IIS metabase and the DCOMconfig. Also I would suggest to disable Password expiration in the properties of this account for future purposes.

Check this article for more details:

Hi – I hope you can help me as I am little confused.

For example, the site id is «1234»

I have tried running the command to get the anonymous user name, on the default site it shows Iusr_, but onthis example, I get the «is not set at this node» message.

After performing the find command (Thanks, useful!), I see that it has listed W3SVC/1234/root, however, when I try to run the get command with the addition of /root, I get: «ErrNumber: -2147024893 (0x80070003)» – «Error trying to GET the object».

I was just wondering if you can explain this to me, but in addition, my actual problem is that I unticked the anonymous box to set up a user, but now I want to tick it again and run it under Iusr, without knowing the password or changing it anywhere. Is there an easy way just to reset it to the default settings?

Thanks in advance.

Hello William, I am assuming you are running the following command:

Cscript adsutil.vbs get w3svc/1234/anonymoususername and then getting the message:


«is not set at this node»

This is normal. what it means is that your website (corresponding to site id 1234) is inheriting this setting from the global level for the websites. If you really want to check the value that is being inherited at this site level you can run cscript adsutil.vbs get w3svc/anonymoususername.

Rearding your original problem you can just enable anonymous access in the IIS mmc and it will automatically take the setting that this site is inheriting from the root.

Hope this helps!

Thanks for the swift response – but I am still a little confused (Sorry!)

I am still stuck – All I have done is untick the anonymous box to fill it with a credential… so, Anonymous works but with the specified account… However, using the get w3svc/1234/anonymoususername just reports the node problem.

doing find shows that w3svc/1234/root has one set.

I do not understand why the tool is reporting it wrong, however, it is not that important. As for anonymous, I tried re ticking the box, choosing the Iusr account, but every time I visit the site, it simply asks for credentials.

Again, I am almost certain this is because it has lost the stored password for the IUSR account. Rather than declare the IUSR password (which I am not sure of) here, I would much rather simply like to delete the custom attribute and allow it to default back to inherited.

(In your last paragraph, I am a little confused – I cannot do this at the top level as there are a few sites running which need anonymous disabled and custom credentials.)

Sorry, I know I am being awkward/complicated, this has just been giving me problems today and I am happy to give more info if you need it.

No worries! Please contact me at xxxxx and will take it from there.

Many thanks for this article and the help you have given me – Been absolutely brilliant and has helped a lot.

Even years after it was written, it is still very helpful!

Thank you for a awesome knowledgeable article and excellent to the point answers.

Идентификация в ASP.NET

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

Базовые понятия систем безопасности

Существуют два понятия, без которых невозможно обсуждение безопасности:

  • Аутентификация (authentication) – процесс определения личности пользователя, требующий верные логин и пароль, чтобы доказать, что он на самом деле тот, за кого себя выдает.
  • Авторизация (authorization) – это процесс выставления прав пользователю, прошедшего аутентификацию.

Способы аутентификации ASP.NET

Среда ASP.NET предоставляет три способа аутентификации:

  • Windows – аутентификация на основе системы диспетчера локальной сети Windows
    NT.
  • Forms – аутентификация на основе cookies.
  • Passport – аутентификация с помощью службы Passport от
    Microsoft.

Для того, чтобы выбрать тот или иной способ аутентификации потребуется внести изменения в файл конфигурации web.config следующим образом (я выбрал метод Forms — как наиболее актуальную при разработке web-приложений):

Вы можете справедливо заметить, что после внесения показанных выше изменений ничего особенного не происходит.
Эта ситуация возникает из-за того, что мы не запретили доступ анонимным пользователям. Для
такого запрета надо внести еще одно изменение в файле
web.config:

Этот знак — (?) — обозначает всех анонимных пользователей. А включая это правило вы запрещаете им доступ. Теперь каждый пользователь должен быть аутентифицирован, и каждый
не аутентифицированный будет перенаправлен на страницу регистрации.

После того, как вы выбрали режим аутентификации и правила авторизации, вам нужно создать страницу, которая запрашивает информацию у пользователя и решает, можно ли его аутентифицировать. Но об этом чуть позже. А пока я поясню, как мы это будем делать. Пароли и логины мы будем хранить,
например, в файле web.config. Пример того, как это сделать показан ниже:

Небольшие пояснения: параметр loginUrl в теге authentication указывает на страницу регистрации (по умолчанию – default.aspx), а параметр passwordFormat в теге credentials означает, что логин и пароль не зашифрованы (альтернативы – использовать алгоритмы шифрования SHA1 и MD5. О них мы поговорим позже ).

Для проверки верности логина и пароля будем использовать метод
FormsAuthentication. Authenticate(string login,string pass). А для регистрации пользователя в приложение ASP.NET путем создания cookie, и перенаправления на страницу, которая была изначально запрошена пользователем, будем использовать метод
FormsAuthentication. RedirectFromLoginPage(string login, bool CreatePersistentCookie) (второй параметр указывает на то,
каким будет посланный cookie – постоянный (срок годности
— 50 лет, значение true) или нет (false)).

Вот, собственно, и сам код страницы регистрации:

Средства безопасности ASP.NET. Аутентификация

Давайте теперь перейдём к описанию процесса аутентификации непосредственно в рамках среды ASP.NET, где для вашего выбора предоставлены 3 вида аутентификации:

* Аутентификация Windows
* Формой
* Паспортом

Аутентификация Windows:

Как и следует из названия, этот метод основывается на использовании учётных записей Windows. Такой метод уместен, если вы создаёте приложение для локальной сети, и все действующие учётные записи и группы хранятся на заранее определённом домене. При этом нужно быть очень осторожными, назначая права доступа пользователям, поскольку вы одновременно задаёте и права для работы в Windows. Для того, чтобы настроить ASP.NET на работу в режиме Windows аутентификации необходимо изменить файл настройки Web-проекта Web.config или при необходимости конфигурационный файл всего сервера, расположенный по адресу WINDOWS_FOLDERMicrosoft.NET

Framework.NET versionCONFIGMachine.config. В нашем примере мы будем работать исключительно с файлом проекта – Web.config, в котором вам нужно найти раздел authentication и присвоить его атрибуту mode значение Windows:

Теперь можно приступить непосредственно к программированию и реализации аутентификации на основе Windows. В помощь вам класс WindowsIdentity, который служит специально для работы с аутентификацией Windows. Вообще, для аутентификации, базирующейся на Windows, существуют два основных класса, предоставляемых .NET Framework:

* GenericIdentity – только реализует интерфейс IIdentity и не относится к какому-то определённому типу аутентификации
* WindowsIdentity – также является реализацией интерфейса IIdentity, но плюс ещё и включает методы, характерные только для аутентификации на основе Windows


Имя пользователя и группы хранятся в объекте WindowsIdentity в следующем формате: DOMAINUserName и DOMAINGroup соответственно. Исключение составляют лишь встроенные группы, например группа Administrators, для обращения к ней можно использовать строку подключения через WindowsIdentity: BUILTINAdministrators. Или же можно задать встроенную группу из перечисления System.Security.Principal.WindowsBuiltInRole.

Илон Маск рекомендует:  Что такое код swf_rotate

Из рис. 1 видно, что объект WindowsIdentity позволяет получить имя пользователя; определить тип аутентификации; установить, была ли аутентификация проведена анонимно; также можно узнать, прошёл пользователь аутентификацию или нет, гость он или системный пользователь.

Рис. 1 – Объект WindowsIdentity

Поскольку в приложениях ASP.NET для обращения к объекту WindowsIdentity нужно будет выстроить следующую цепочку:

HttpContext.Current.User.Identity, то вы сможете также определить, к какой роли принадлежит текущий пользователь. Это можно достичь благодаря тому, что свойство User в этой цепочке реализует интерфейс Iprincipal, который позволяет определить принадлежность пользователя к определённой роли путём вызова функции IsInRole, имеющей следующий синтаксис:

Но давайте ненадолго отойдём от голой теории и попробуем реализовать практический пример. Для этого создайте новый проект ASP.NET Web Application и введите следующий код:
Default.aspx:

Если был выбран режим аутентификации Windows и настройки IIS не вызвали никаких конфликтных ситуаций, то вы получите соответствующую информацию о своём текущем пользователе. Если же поле имени пользователя и типа аутентификации оказались пустыми, то вам нужно просто настроить IIS, для этого выполните следующие действия:

1. Откройте IIS и найдите виртуальный каталог с этим приложением
2. Откройте окно свойств для этого каталога и перейдите во вкладку Безопасность каталога. В рамке Анонимный доступ и проверка подлинности нажмите кнопку Изменить…
3. В появившемся окне (рис. 2) снимите флажок Анонимный доступ

Рис. 2 – Настройка IIS

На этом мы закончим рассмотрение аутентификации на основе Windows и перейдём к аутентификации формой.

Аутентификация формой:

Аутентификация формой или, как её ещё называют аутентификация на основе Cookie-файлов, имеет ряд преимуществ над аутентификацией Windows.

* Во-первых, вы имеете возможность самому определить на свой вкус и цвет или на вкус и цвет пользователя внешний вид формы регистрации вместо однотипного окна регистрации Windows.
* Во-вторых, вы полностью контролируете вводимую информацию
* Сведения о пользователях теперь может храниться не только в SAM или Active Directory, но и в любом другом хранилище, в частности: база данных, каталог LDAP, XML-файлы или же обычный текстовый файл.
* Отпадает необходимость связывать политику безопасности сервера с политикой Web-приложения, поскольку, как уже было ранее сказано, все сведения о пользователях можно вынести в отдельное хранилище данных без каких-либо пересечений с учётными записями ОС.

Получить логин текущего пользователя

Здравствуйте.
Используется стандартная аутентификация ASP.NET MVC3 для интернет приложения.
В определенный момент нужно получить логин юзера который в данный момент делает какую либо операцию.
Как это можно сделать.
Пока присматриваюсь к классу Membership

Добавлено через 40 секунд
Надо попробовать Membership.GetUser().ToString()

Добавлено через 1 час 44 минуты
Заметил, что в приложении есть приветствии пользователя, там и нашел.
Если кому интересно строка User.Identity.Name.ToString() прекрасно работает

26.12.2012, 23:15

Как получить Id текущего пользователя?
Доброго времени суток. Использую ASP.NET Identity 2.0. Необходимо получить id пользователя. Нашёл.

Получить только логин пользователя в домене
На сервере входящем в домен требуется организовать доступ к сайту пользователям только этого.

Логин пользователя в sharepoint
Здравствуйте Как из веб части узнать логин пользователя который пользуется sharepoint-ом для.

Как взять имя пользователя из AD (не логин)?
На работе попросили сделать формочку для отправки СМС работникам конторы, вроде сделал, но есть.

Защитить логин и пароль пользователя без SSL
Реально ли это сделать и как? Если шифровать открытым ключом в JavaScript, то ведь мошенник может.

Что такое анонимное имя пользователя, которое должно выглядеть как в объекте ProviderInfo?

По определению Microsoft ProfileInfo http://msdn.microsoft.com/en-us/library/system.web.profile.profileinfo.aspx объект unauthenticated profileinfo имеет имя пользователя; естественно, это должно быть ключом к сохранению/справочной информации профиля на данном сеансе (я предполагаю, что он основан на сеансе). Я предполагаю, что это какой-то ориентир или что-то в этом роде, но я не вижу, где это определено, создано, отслеживается и т.д. Может ли кто-нибудь указать мне в правильном направлении?

Ну. Вопрос меня заинтересовал, поэтому я решил провести какое-то исследование.

Немного копания в документации привела меня сначала к реализации статьи MSDN- провайдера, где я нашел следующее:

Метод GetPropertyValues

Принимает входной файл SettingsContext и объект SettingsPropertyCollection.

Файл SettingsContext предоставляет информацию о пользователе. Вы можете использовать эту информацию в качестве первичного ключа для извлечения информации о свойствах профиля для пользователя. Используйте объект SettingsContext для получения имени пользователя и проверки подлинности пользователя или анонимности.

Таким образом, определение того, является ли пользователь аутентифицированным или нет, обычно выполняется на более высоком уровне. Во всяком случае, я взглянул на код реализации SqlProfileProvider по умолчанию Microsoft (а именно на реализацию метода GetPropertyValues ) и выяснил, что он вызывает метод private void GetPropertyValuesFromDatabase(string userName, SettingsPropertyValueCollection svc) который на самом деле имеет следующий код:

Итак, если у нас есть не аутентифицированный запрос, то идентификатор пользователя берется из свойства HttpContext.Current.Request.AnonymousID . Поиск через MSDN для этого свойства показал следующую страницу: Свойство HttpRequest.AnonymousID(System.Web). Хотя он все еще не описывает точный алгоритм генерации этого идентификатора, но он предоставляет информацию о том, как вы можете переопределить этот алгоритм по умолчанию, если хотите. Все, что вам нужно, — это перегрузить public void AnonymousIdentification_Creating(Object sender, AnonymousIdentificationEventArgs e) метод public void AnonymousIdentification_Creating(Object sender, AnonymousIdentificationEventArgs e) в вашем веб-приложении. Также на этой странице представлена некоторая информация о том, как анонимный .ASPXANONYMOUS сохраняется между вызовами (по умолчанию он хранится в .ASPXANONYMOUS cookie).

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

Средства безопасности ASP.NET. Аутентификация

Давайте теперь перейдём к описанию процесса аутентификации непосредственно в рамках среды ASP.NET, где для вашего выбора предоставлены 3 вида аутентификации:

* Аутентификация Windows
* Формой
* Паспортом

Аутентификация Windows:

Как и следует из названия, этот метод основывается на использовании учётных записей Windows. Такой метод уместен, если вы создаёте приложение для локальной сети, и все действующие учётные записи и группы хранятся на заранее определённом домене. При этом нужно быть очень осторожными, назначая права доступа пользователям, поскольку вы одновременно задаёте и права для работы в Windows. Для того, чтобы настроить ASP.NET на работу в режиме Windows аутентификации необходимо изменить файл настройки Web-проекта Web.config или при необходимости конфигурационный файл всего сервера, расположенный по адресу WINDOWS_FOLDERMicrosoft.NET

Framework.NET versionCONFIGMachine.config. В нашем примере мы будем работать исключительно с файлом проекта – Web.config, в котором вам нужно найти раздел authentication и присвоить его атрибуту mode значение Windows:


Теперь можно приступить непосредственно к программированию и реализации аутентификации на основе Windows. В помощь вам класс WindowsIdentity, который служит специально для работы с аутентификацией Windows. Вообще, для аутентификации, базирующейся на Windows, существуют два основных класса, предоставляемых .NET Framework:

* GenericIdentity – только реализует интерфейс IIdentity и не относится к какому-то определённому типу аутентификации
* WindowsIdentity – также является реализацией интерфейса IIdentity, но плюс ещё и включает методы, характерные только для аутентификации на основе Windows

Имя пользователя и группы хранятся в объекте WindowsIdentity в следующем формате: DOMAINUserName и DOMAINGroup соответственно. Исключение составляют лишь встроенные группы, например группа Administrators, для обращения к ней можно использовать строку подключения через WindowsIdentity: BUILTINAdministrators. Или же можно задать встроенную группу из перечисления System.Security.Principal.WindowsBuiltInRole.

Из рис. 1 видно, что объект WindowsIdentity позволяет получить имя пользователя; определить тип аутентификации; установить, была ли аутентификация проведена анонимно; также можно узнать, прошёл пользователь аутентификацию или нет, гость он или системный пользователь.

Рис. 1 – Объект WindowsIdentity

Поскольку в приложениях ASP.NET для обращения к объекту WindowsIdentity нужно будет выстроить следующую цепочку:

HttpContext.Current.User.Identity, то вы сможете также определить, к какой роли принадлежит текущий пользователь. Это можно достичь благодаря тому, что свойство User в этой цепочке реализует интерфейс Iprincipal, который позволяет определить принадлежность пользователя к определённой роли путём вызова функции IsInRole, имеющей следующий синтаксис:

Но давайте ненадолго отойдём от голой теории и попробуем реализовать практический пример. Для этого создайте новый проект ASP.NET Web Application и введите следующий код:
Default.aspx:

Если был выбран режим аутентификации Windows и настройки IIS не вызвали никаких конфликтных ситуаций, то вы получите соответствующую информацию о своём текущем пользователе. Если же поле имени пользователя и типа аутентификации оказались пустыми, то вам нужно просто настроить IIS, для этого выполните следующие действия:

1. Откройте IIS и найдите виртуальный каталог с этим приложением
2. Откройте окно свойств для этого каталога и перейдите во вкладку Безопасность каталога. В рамке Анонимный доступ и проверка подлинности нажмите кнопку Изменить…
3. В появившемся окне (рис. 2) снимите флажок Анонимный доступ

Рис. 2 – Настройка IIS

На этом мы закончим рассмотрение аутентификации на основе Windows и перейдём к аутентификации формой.

Аутентификация формой:

Аутентификация формой или, как её ещё называют аутентификация на основе Cookie-файлов, имеет ряд преимуществ над аутентификацией Windows.

* Во-первых, вы имеете возможность самому определить на свой вкус и цвет или на вкус и цвет пользователя внешний вид формы регистрации вместо однотипного окна регистрации Windows.
* Во-вторых, вы полностью контролируете вводимую информацию
* Сведения о пользователях теперь может храниться не только в SAM или Active Directory, но и в любом другом хранилище, в частности: база данных, каталог LDAP, XML-файлы или же обычный текстовый файл.
* Отпадает необходимость связывать политику безопасности сервера с политикой Web-приложения, поскольку, как уже было ранее сказано, все сведения о пользователях можно вынести в отдельное хранилище данных без каких-либо пересечений с учётными записями ОС.

Разрешить пользователям Анонимус доступ только Логин и Регистрация страницы в ASP.NET

Я создаю приложение ASP.NET. Мне нужно сделать только две страницы (login.aspx и register.aspx) видимой для анонимных пользователей в default.aspx странице.

Я пытался разрешить пользователям Анонимус доступ только Логин и Регистрация страницы , но не знаю , где именно изменить для своего собственного кода. Таким образом , любой намек?

Это пример в моем приложении:

Web.config

Вы можете попробовать путь 2-первых, это — меню делают .Первый раз видимым ложным. .После регистрации пользователя добавить этот пользователь в сессию. .Затем добавить условие, если сессия не равно нулю, то сделать меню видимым Правда

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

Также вы можете попробовать использовать Web.config см по следующей ссылке:

вы можете сделать все другие страницы в отдельной главной странице и что главная страница будет иметь в чеках .cs файла, если пользователь было авторизоваться на сессии, а также на страницах, которые разрешено антонимичные человек обыкновения быть с этой главной страницей. например:

ASP.NET, Integrated Windows Authentication and Anonymous Access. [Answered] RSS

4 replies

Last post Oct 09, 2008 10:42 PM by tokyoh

ASP.NET, Integrated Windows Authentication and Anonymous Access.

Oct 07, 2008 04:53 AM | tokyoh | LINK

Hi,
I want to allow anonymous access to an asp.net website but also authenticate the users because some authorization is done by the web application. I want the web app to run under network service account and access to the website root be restricted to the IIS_WPG only.
I am confused because although impersonation is not enabled, the domain users are denied access unless added to the website root ACL. Surely, all requests should be using the network service account??

Thanks for any help.

This is my current setup:

Windows 2003 R2 SP2

Re: ASP.NET, Integrated Windows Authentication and Anonymous Access.

Oct 07, 2008 08:35 AM | tomkmvp | LINK

tokyoh

I want to allow anonymous access to an asp.net website but also authenticate the users

Re: ASP.NET, Integrated Windows Authentication and Anonymous Access.

Oct 07, 2008 09:02 PM | tokyoh | LINK


What I was trying to do was somehow separate the authentication and authorization, so I could identify the user but still control the authorization with a single identity.
Clearly impossible, right? An identity is either a domain user or anon.

But what about asp.net? With IWA enabled, I see this:

System.Security.Principal.WindowsIdentity: NT AUTHORITY\NETWORK SERVICE
HttpContext.Current.User: Domain\username

Here, the request contains both the worker process id and current user id. How do these relate to the ACL on the website root? Which id is used for authorization?
Sorry for these basic questions but I have to admit I just dont get it!

Re: ASP.NET, Integrated Windows Authentication and Anonymous Access.

Oct 08, 2008 09:19 AM | tomkmvp | LINK

The following tables illustrate, for a range of IIS authentication settings, the resultant identity that is obtained from each of the variables that maintain an IPrincipal and/or IIdentity object. The following abbreviations are used in the table:

  • HttpContext = HttpContext.Current.User, which returns an IPrincipal object that contains security information for the current Web request. This is the authenticated Web client.
  • Windows > Note With IIS 6.0 running on Windows Server 2003, the identity Matrix works except that the Machine\ASPNET identity is replaced with NT Authority\Network Service.

Table 1. IIS anonymous authentication

Web.config Settings Variable Location Resultant Identity
HttpContext
WindowsIdentity
Thread

MACHINE\IUSR_MACHINE
HttpContext
WindowsIdentity
Thread

MACHINE\ASPNET
HttpContext
WindowsIdentity
Thread
Name provided by user
MACHINE\IUSR_MACHINE
Name provided by user
HttpContext
WindowsIdentity
Thread
Name provided by user
MACHINE\ASPNET
Name provided by user

Table 2. IIS basic authentication

Web.config Settings Variable Location Resultant Identity
HttpContext
WindowsIdentity
Thread
Domain\UserName
Domain\UserName
Domain\UserName
HttpContext
WindowsIdentity
Thread
Domain\UserName
MACHINE\ASPNET
Domain\UserName
HttpContext
WindowsIdentity
Thread
Name provided by user
Domain\UserName
Name provided by user
HttpContext
WindowsIdentity
Thread
Name provided by user
MACHINE\ASPNET
Name provided by user

Table 3. IIS digest authentication

Web.config Settings Variable Location Resultant Identity
HttpContext
WindowsIdentity
Thread
Domain\UserName
Domain\UserName
Domain\UserName
HttpContext
WindowsIdentity
Thread
Domain\UserName
MACHINE\ASPNET
Domain\UserName
HttpContext
WindowsIdentity
Thread
Name provided by user
Domain\UserName
Name provided by user
HttpContext
WindowsIdentity
Thread
Name provided by user
MACHINE\ASPNET
Name provided by user

Table 4: IIS integrated Windows

Web.config Settings Variable Location Resultant Identity
HttpContext
WindowsIdentity
Thread
Domain\UserName
Domain\UserName
Domain\UserName
HttpContext
WindowsIdentity
Thread
Domain\UserName
MACHINE\ASPNET
Domain\UserName
HttpContext
WindowsIdentity
Thread
Name provided by user
Domain\UserName
Name provided by user
HttpContext. WindowsIdentity
Thread
Name provided by user
MACHINE\ASPNET
Name provided by user

Re: ASP.NET, Integrated Windows Authentication and Anonymous Access.

Oct 09, 2008 10:42 PM | tokyoh | LINK

Excellent, thank you very much.

So, I assume the resultant identities of HttpContext, WindowsIdentity and Thread ALL need permission on the website folder.

How to get aspnet_Users.UserId for an anonymous user in ASP.NET membership?

December 2020

4.2k раз

Я пытаюсь получить членство САШ UserId поля от анонимного пользователя.

Я включил анонимную идентификацию в web.config:

Я также создал профиль:

Я вижу данные в моей aspnetdb\aspnet_Users таблице для анонимных пользователей , которые имели информацию о профиле набора.

Мне просто нужно найти, как получить значение в «USERID».

Это не возможно использовать:

Request.AnonymousID является другой GUID и не равно 36139818-4245-45dd-99cb-2a721d43f9c5.

Есть ли способ , чтобы получить эту USERID. Я хочу , чтобы связать его с неполной активностью для анонимного пользователя. Использование первичного ключа aspnet_Users предпочтительнее того , чтобы создать свой собственный идентификатор GUID (который я мог бы сделать и хранить в профиле).

Это в основном боян этого вопроса , но вопрос никогда не был на самом деле ответил.

2 ответы

Вы можете получить UserId для анонимного пользователя с этим:

строка = идентификатор пользователя Request.AnonymousID

Хорошо, таким образом MemberShip.GetUser() возвращает объект типа MembershipUser .

Копаясь больше в таблицы в aspnetdb базе данных, кажется , что , хотя ряд создается aspnet_Users для всех пользователей (даже анонимные) — строка не создаются в aspnet_Membership если useris фактически аутентифицирован / не зарегистрирован.

Но, анонимный профиль (aspnet_Users таблица) дается GUID вместо того , чтобы UserName .

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

UserId Поле присутствует в aspnet_Users таблице также, так что, если вам действительно нужно уникальное поле USERID , то вы можете получить его с помощью «ручного» SQL поиска.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL