Я пытаюсь внедрить проверку подлинности формы в asp.net для одного из моих приложений на веб-сайте по умолчанию в IIS, чтобы предотвратить доступ анонимных пользователей к веб-сайту, и у меня возникают некоторые проблемы при попытке сделать это
У меня есть следующие настройки, сделанные в файле web.config для этого приложения, чтобы реализовать auth формы. Я включил тег ключа компьютера, тег аутентификации для аутентификации на основе форм и тег авторизации, чтобы запретить анонимному пользователю
<authentication mode="Forms">
<forms name="cookiename" cookieless="UseCookies" path="/" protection="None" timeout="30" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
В интерфейсе IIS,
- В правилах авторизации .NET есть анонимные пользователи с правилом запрета и все пользователи (унаследованного типа) с правилом разрешения
- Кроме того, в пользовательском интерфейсе аутентификации у меня отключена анонимная аутентификация и включена аутентификация на основе (здесь нужно отключить анонимную аутентификацию?)
Когда пользователь входит на наш портал, ему назначается файл cookie, чтобы IIS мог отслеживать личность пользователя и переходить к приложению (странице Aspx), для которого я пытаюсь реализовать проверку подлинности формы. Я использую веб-клиент, чтобы опубликовать какой-либо запрос на выполнение проверки перед переходом в это приложение, и я использую CookieAwareWebClient для обработки файлов cookie.
public class CookieAwareWebClient : WebClient
{
public CookieAwareWebClient()
{
CookieContainer = new CookieContainer();
}
public CookieContainer CookieContainer { get; private set; }
protected override WebRequest GetWebRequest(Uri address)
{
var request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = CookieContainer;
return request;
}
}
Используя CookieAwareWebClient, я пытаюсь опубликовать запрос. Здесь authenticationCookie - это файл cookie, который создается сразу после входа пользователя, и я устанавливаю это значение для объекта myCookie, чтобы IIS мог отслеживать личность пользователя
using (CookieAwareWebClient client = new CookieAwareWebClient())
{
Cookie myCookie = new Cookie();
myCookie.Name = authenticationCookie.Name;
myCookie.Value = authenticationCookie.Value;
myCookie.Domain = URL.Host;
client.CookieContainer.Add(myCookie);
client.UseDefaultCredentials = true;
byte[] responsebytes = client.UploadValues(URL, "POST", reqparm);
}
Когда я пытаюсь отправить запрос на URL-адрес, личность пользователя где-то теряется, даже если в веб-клиенте есть контейнер cookie, в котором хранится значение cookie, и я получаю сообщение об ошибке 401
Remote server returned an error (401) Unauthorized
Из-за этого IIS считает пользователя анонимным и, следовательно, не может загрузить приложение. Это правильный способ обработки формы авторизации, чтобы запретить анонимным пользователям доступ к веб-сайту и где я ошибаюсь? Я использую IIS 8.5 версии