Проверка подлинности на основе форм с использованием C # для приложения не удалась - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь внедрить проверку подлинности формы в 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 версии

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