2015-02-05 3 views
0

У нас есть старый веб-сайт asp.net (.Net 2.0), назовите его «ChildWeb», в котором есть сотни PDF-документов. Аутентификация для этого веб-сайта, полученная путем получения идентификатора GUID с родительского веб-сайта, назовите его «ParentWeb». Пользователи войдут в систему «ParentWeb», а затем нажмите ссылку, чтобы перейти к «ChildWeb».Ограничить доступ к статическим файлам для аутентифицированных пользователей в ASP.Net

В «ChildWeb» есть проверка состояния, чтобы проверить, есть ли GUID или некоторые значения в сеансах, чтобы разрешить пользователю. Если нет, то пользователь будет перенаправлен на страницу входа в систему «ParentWeb».

Поскольку этот «ChildWeb» на самом деле не настроил аутентификацию на уровне сайта, все документы подвергаются аут-ауту, если кто-либо знает URL-адрес этого документа. Я ищу способ исправить это.

Я хочу настроить приложение для использования проверки подлинности с помощью форм и установить URL-адрес перенаправления в «ParentWeb» (они находятся в том же домене) и разрешить «ParentWeb» перенаправлять на страницу в «ChildWeb», которая чтобы разрешить анонимный доступ и установить cookie FormAuthentication на этой странице на основе той же проверки идентификатора GUID или сеанса. Затем я могу сделать папку, содержащую все документы, доступной только для аутентифицированных пользователей.

Есть ли какие-либо проблемы или риски при использовании вышеуказанного подхода? Есть ли другой лучший подход, используя Heep Handler или что-то еще?

ответ

1

Существует несколько подходов к этому.

Во-первых, простой подход заключается в том, чтобы просто создать загрузчик ashx-обработчика. Передайте идентификатор GUID для аутентификации и имени файла PDF. Это замаскирует, где находится файл PDF, и, предположив, что ваш GUID истекает, он не позволит им использовать один и тот же URL по дороге.

Если вы работаете на выделенном сервере, другой простой способ сделать это - просто переместить файлы PDF за пределы вашей папки приложений ASP.NET. Создайте каталог в корневом каталоге вашего диска C: и скопируйте туда файлы. Затем создайте общий обработчик .ashx. Передайте свой GUID в качестве параметра запроса обработчику и в вашем обработчике, попросите его аутентифицировать ваш GUID и передать соответствующий файл PDF. Если вы используете общий хостинг, вы также можете переместить файлы в папку App_Data, которая автоматически защищена ASP.NET.

Другой подход, если это осуществимо, заключается в шифровании всех файлов PDF и создании универсального обработчика .ashx, который, опять же, аутентифицирует GUID, расшифровывает файл PDF, а затем обслуживает его.

Еще один подход заключается в том, чтобы хранить файлы PDF внутри базы данных SQL. Этот подход не рекомендуется, если в вашем приложении много трафика. Это значительно замедлит ваше приложение, если будет много трафика. Но для этого сохраните PDF-файлы в SQL, а затем создайте обработчик .ashx для проверки подлинности GUID и подачи соответствующего файла PDF.

Окончательный подход, конечно, так же, как вы предложили, использовать проверку подлинности с помощью форм. Вы можете использовать location tag, чтобы запретить пользователям доступ к вашему каталогу в вашем web.config.

+0

Thank you Icemanind. Url's жестко закодированы во многих местах. Так что это хорошая идея написать HttpHandler, который будет проверять значение Session (поскольку у меня может не быть GUID на каждой странице), в то время как службы .pdf-файлы. Или он откроет некоторый риск для безопасности по сравнению с написанием обработчика загрузки? – user3731783

+0

@ user3731783 - Нет, сессия будет работать. Вы можете получить текущий сеанс в обработчике ashx, используя HttpContext.Current.Session. – Icemanind

+0

Спасибо. Я думаю, что я почти там. Прекрасно работает для пользователей, не прошедших проверку подлинности. Для аутентифицированных пользователей, поскольку я обрабатываю pdf-файлы, как отправить фактический PDF-файл в браузер? – user3731783

Смежные вопросы