Переслать аутентификацию ASP.Net: - PullRequest
3 голосов
/ 20 июля 2011

У меня есть веб-проект Asp.net, использующий authentication mode="Forms".Мой логин работает отлично.

Теперь проблема в том, что у меня есть ссылка на сайт, который доступен только авторизованным пользователям.Возможно, что PDF-файл этой ссылки не существует.

Что я хочу сделать, это проверить наличие PDF с HttpWebRequest.Поскольку файл pdf доступен только авторизованным пользователям (web.config/location/system.web/authorization), я должен пометить HttpWebRequest как авторизованный.Но у меня нет logincredentials в это время (только когда пользователь входит в систему и .net Framework не получит мне пароль пользователя)

Кто-нибудь знает, как отправить уже установленныйавторизация с новым HttpWebRequest?

спасибо

мо

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

В то время я не нашел решения для повторной отправки аутентификации, поэтому я перенес проверку, если пользователю разрешен доступ к определенному файлу в собственный http-обработчик. Теперь я могу сгенерировать ссылки на pdf-файл, доступный через http-обработчик, и могу проверить пользователя в запросе процесса через объект httprequest.user.

0 голосов
/ 26 августа 2011

Просто перечитайте ваш вопрос.Как я понимаю, у вас есть сайт А, содержащий PDF, который защищен проверкой подлинности с помощью форм.У вас есть другой сайт B без аутентификации, и вы хотите сделать что-то на стороне B на сайте B в зависимости от того, существует ли ссылка на A.

Для этого вы можете сделать HttpWebRequest и проверить код состояния.401 означает, что ссылка существует, но требует аутентификации.404 означает, что он не существует.

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse())
{

   if (myHttpWebResponse.StatusCode == HttpStatusCode.Unauthorized)
   {
      // link exists, requires authentication
   }
   else if (myHttpWebResponse.StatusCode == HttpStatusCode.NotFound)
   {
      // link does not exists
   }                                         
}

В качестве альтернативы вы можете использовать учетную запись службы с известными учетными данными и аутентифицировать запрос.Аутентификация форм с помощью HttpWebRequest - непростая задача, поскольку в формах используется cookie-файл, который вам необходимо будет реплицировать.

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

...