Неаутентифицированные пользователи не могут видеть изображения на сайте - PullRequest
8 голосов
/ 07 ноября 2010

Когда я запускаю свой сайт в режиме отладки в Visual Studio, все выглядит отлично, и все изображения на странице отображаются нормально.Но как только я разверну свой веб-сайт на веб-сервере IIS7 (сомневаюсь, что другие версии будут иметь значение, но вы никогда не узнаете), тогда пользователи не смогут видеть изображения на сайте, пока не войдут в систему.

Веб-сайтявляется сайтом asp.net MVC, и я новичок в MVC, хотя у меня есть большой опыт работы с формами asp.net.Кажется, что только авторизованные пользователи могут получить доступ к папке с изображениями, и в моем web.config есть раздел авторизации, в котором говорится, что только администраторы могут получить доступ к сайту, так как мне сделать так, чтобы все пользователи, прошедшие аутентификацию или иные, могли просматриватьИзображения?

- Обновление -

Я попытался вставить предложенный блок конфигурации, что из всего, что я могу сказать, имеет смысл, но это не такпохоже, что-то изменило.В приведенном ниже примере есть содержимое / изображения для пути, но до этого я пробовал только содержимое, так как все в порядке, чтобы там было доступно.Я также попытался установить для параметра allowOverride значение false, что, похоже, тоже не имело значения.

<location path="Content/Images">
    <system.web>
        <authorization>
            <allow users ="*" />
        </authorization>
    </system.web>
</location>  

- Обновление 2 - Забавно, что я этого не делаюя даже вижу какие-либо явные запрещающие записи в моем web.config, просто разрешение для администратора, и когда я вошел в IIS 7 и использовал пользовательский интерфейс, чтобы разрешить всем пользователям доступ к каталогу контента, он также не обнаружил никаких запрещающих записей в списке.Но опять же, этот проект работает нормально, когда я просто отлаживаю его с моего персонального компьютера, только после его развертывания у меня возникают проблемы ...

<authorization>
    <allow roles="admin" />
</authorization>
<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

Ответы [ 7 ]

14 голосов
/ 07 ноября 2010

В файле web.config после тега </system.web> добавьте следующее

<location path="images">
     <system.web>
       <authorization>
        <allow users ="*" />
       </authorization>
    </system.web>
</location>

, где path="images" - это имя папки с изображениями / css.

Обновление:

Если вы используете ASP.NET MVC, я удалил бы объявление авторизации в файле web.config и использовал бы атрибут [Authorize] на контроллерах, которые необходимо заблокировать.

Вы также можете указать роли, которым вы хотите предоставить доступ, используя [Authorize("admin")].

6 голосов
/ 01 августа 2013

Просто столкнулся с той же проблемой. Мы заметили это на нашей странице входа. CSS и изображения не загружались (они находились в каталоге содержимого). Добавление IUSR в папку с правами чтения исправило это для нас.

6 голосов
/ 04 марта 2012

По умолчанию конфигурация, которую вы определяете в файле Web.config, применяется к каждому подкаталогу содержащей его папки. Если у вас есть Web.config в корне приложения, эта конфигурация будет распространяться на все подкаталоги, включая те, где у вас есть изображения и таблицы стилей Css. Итак, если в вашем корневом Web.config есть правило, подобное этому:

<system.web>
...
<authorization>
  <deny users="?"/>
</authorization>
...
</system.web>

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

Чтобы исправить это, вам нужно включить еще один Web.config в каждый подкаталог, содержащий ресурсы для презентаций, и применить правила, которые вы хотите переопределить. В вашем случае это должно сделать работу:

<?xml version="1.0"?>
<configuration>
   <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
   </system.web>
</configuration>

Если вы используете Темы, поместите один файл Web.config в папку темы.

2 голосов
/ 10 декабря 2012

Старый вопрос, но я столкнулся с той же проблемой и нашел ответ. Я создал новую папку для страниц членства, к которой я хотел, чтобы вошедшие в систему пользователи имели доступ, но изображения на них не показывались! Оказывается, что независимо от того, что я пытался, я не мог установить относительный путь к изображениям из папки «Члены».

Проблема была в html-изображении (насколько я могу судить, поправьте меня, если я ошибаюсь). Я поменял его на asp:image с относительным путем, и теперь он отлично работает. Мой новый код: asp:image runat="server" id="Logo" ImageUrl="~/Images/logo.jpg"

Обратите внимание на '~ /', который не подойдет мне Я пробовал: img src="../Images/logo.jpg", img src="~/Images/logo.jpg", img src="/Images/logo.jpg" и т. Д. Безрезультатно.

Надеюсь, этот ответ поможет кому-то быстрее решить эту проблему в будущем.

1 голос
/ 07 ноября 2010

Попробуйте просмотреть файл изображения напрямую и посмотреть, подходит ли это для анонимного пользователя. В IIS 7 есть способ, с помощью которого вы можете авторизовать анонимных пользователей непосредственно из вашего пользовательского интерфейса [что, в свою очередь, приведет к созданию web.config, если он не существует].

Папка -> Правила авторизации .NET -> Добавить разрешающее правило

0 голосов
/ 01 августа 2013

Мы столкнулись с той же проблемой в нашем проекте и нашли решение, хотя мы не уверены в причинах такого поведения.

У нас был похожий сценарий с папкой, содержащей все наши png-изображения.Наша коллега по маркетингу хотела переименовать некоторые из них, поэтому, чтобы ей было легче, мы поделились (это может быть ключом) этой папке, предоставив ей права на чтение / запись.

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

Мы поняли, что проблема связана с общим доступом к папке, потому что она начала возникать в тот момент.В противном случае мы все еще не видим никакой связи между авторизацией / входом в систему пользователя ASP.NET MVP и правами пользователя на жестком диске.Мы могли ожидать исключения IO или чего-то подобного, но не такого поведения.

После проверки папки и сравнения с другими папками мы поняли, что после совместного использования разрешения для папки немного изменились.В основном они больше не наследовали из родительской папки, и некоторые разрешения, такие как CREATOR OWNER и MACHINE_NAME \ Users, исчезли (хотя IUSR и пользователь пула приложений все еще были там).

Итак, мы переименовали эту папку, создалиновый с тем же именем, и скопировал содержимое из старой папки в новую.У новой папки были права, унаследованные от ее родителя, и все снова стало работать идеально.

Это решило нашу проблему, но мы все еще не уверены, почему все это произошло именно так.

С уважением

0 голосов
/ 07 ноября 2010

Используете ли вы структуру членства.Я подозреваю, что вы неправильно настроили свои настройки разрешений в web.config, и ваша папка с изображениями разрешает только авторизованные запросы.Это можно легко изменить через web.config.Просто удалите имя папки из авторизованного раздела, и это должно решить проблему.

Для вашей справки это должен быть раздел в web.config, если вы используете структуру членства:

 <authorization>
  <deny roles="xyz" />
</authorization>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...