Сделать папку доступной только для авторизованных пользователей в IIS7

У меня есть подпапка на моей веб-странице с pdf-файлами.
Доступ к ним можно получить только в том случае, если пользователь вошел в систему, информация для входа доступна через Microsoft CRM, а переменная хранится в кеше.
Код написано на vb.net, веб-сервер - IIS7.

Как я могу запретить доступ к этой папке для незарегистрированных пользователей? Я искал решение, но не нашел того, что работает с CRM-логином.

Я также изучал возможность переопределения URL-адресов, чтобы пользователь не мог видеть прямой путь к файлу (www.abc.com/download/test.pdf), а вместо этого видел бы только недисциплинарный URL-адрес (www.abc .com / pdf). Но это тоже не сработало.

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


Ответ Николая работает с этими дополнениями:


Использование fs как нового FileStream ("C: \ www \ pdf \ abc.pdf", FileMode.Open)
Dim docSize As Long = fs.Length
Dim docStream (CInt (docSize) ) В виде байта
fs.Read (docStream, 0, CInt (docSize))
Response.ClearContent ()
Response.ContentType = "application / pdf"
Response.AddHeader (" Content-Disposition "," inline; filename = / _ data / checkliste-4-2013-2.pdf ")
Response.AddHeader (" Content-Length ", docSize.ToString ())
Ответ. BinaryWrite (docStream)
Response.End ()
Конец использования


person snookerfan17    schedule 23.08.2013    source источник


Ответы (1)


В веб-приложениях, над которыми я работал, мы транслируем файлы PDF в браузер. Таким образом, никто не имеет прямого доступа к URL-адресу файла, и, поскольку это страница ASPX, мы можем применить любую необходимую защиту (например, пользователь должен войти в систему).

Вот пример кода, похожего на то, что я использовал:

    Dim strFilePath As String = "C:\www\pdf\abc.pdf"
    Using fs As New System.IO.FileStream(strFilePath, System.IO.FileMode.Open)
        Dim docStream(fs.Length) As Byte
        fs.Read(docStream, 0, CInt(fs.Length))

        Response.ClearContent()
        Response.ContentType = "application/pdf"
        Response.AddHeader("Content-Disposition", "inline; filename=" + System.IO.Path.GetFileName(strFilePath))
        Response.AddHeader("Content-Length", fs.Length)
        Response.BinaryWrite(docStream)
        Response.End()
    End Using
person Nicholas Post    schedule 23.08.2013
comment
Это работает, но было бы неплохо, если бы вы объяснили, что делает ваш код (и использовали vb.net, а не C #). Также как насчет объяснения, откуда берутся strFilePath, docSize и docStream? Для кого-то еще рабочий код vb в моем вопросе. - person snookerfan17; 23.08.2013