2017-02-07 7 views
1

Я пытаюсь вставить видео на YouTube и видеть на консоли такую ​​ошибку, как на консоли:Отказано в фрейме 'https://www.youtube.com/embed/xxxxx, потому что оно нарушает директиву политики безопасности контента

Refused to frame 'https://www.youtube.com/embed/<~videoId~>?showinfo=0' 
because it violates the following Content Security Policy directive: 
"default-src 'self'". Note that 'frame-src' was not explicitly set, so 
'default-src' is used as a fallback. 

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

  1. путем установки заголовка ответа (который я сделал в моем файле web.config):

    <httpProtocol> 
        <customHeaders> 
        <add name="Content-Security-Policy" value="frame-src https://www.youtube.com/" /> 
        </customHeaders> 
    </httpProtocol> 
    
  2. с мета-тегов в заголовке страницы:

    <meta http-equiv="Content-Security-Policy" content="frame-src https://www.youtube.com"> 
    

Ни один из этих методов не работал; Chrome продолжает давать тот же результат в консоли (хотя я сделал то, что, как я думал, это сообщение, и задал требуемую политику безопасности контента). IFrame остается заблокированным и пустым.

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

Мой сайт работает на HTTPS и мой IFRAME и внедренного видео выглядит следующим образом:

<div id="videoContainer"> 
    <iframe src="https://www.youtube.com/embed/<~videoId~>?showinfo=0" 
      frameborder="0" 
      allowfullscreen> 
    </iframe> 
</div> 

Проблема показывает только для Chrome и FFirefox; Internet Explorer 11 отлично работает без политики безопасности содержимого.

Заранее благодарим за любые советы.

+0

Это в Интернете, чтобы я мог посмотреть? Ошибка говорит '' default-src 'self' "', что означает, что он не видит ни одного из ваших значений. Вы видите ожидаемый заголовок ответа в сетевой активности? Вы кадрируете внутри рамки? – oreoshake

+0

@oreoshake нет, он находится в разработке на данный момент и доступен только на моей локальной машине. Код кадра был точно таким же, как указано, и я был в тупике, пока не понял, что это была вещь IdentityServer - с решением, которое я разместил ниже. –

ответ

1

Я сам нашел ответ. Я пытался вставить видео на страницу входа в систему Identity Server 3, и это значительно больше, чем я думал.

вкладка Сеть Chrome содержит отчет СНТ от идентичности сервера, из которого ключ быстрый поиск показал ответ здесь в документации Идентичность сервера: https://identityserver.github.io/Documentation/docsv2/advanced/csp.html

Добавление записи cspOptions к параметрам сервера идентичности Исправлена ​​ошибка alllt без необходимости добавлять какие-либо мои собственные пользовательские заголовки:

var options = new IdentityServerOptions 
{ 
    SigningCertificate = Certificate.Load(), 
    Factory = factory, 
    RequireSsl = true, 
    CspOptions = new CspOptions() {FrameSrc = "https://www.youtube.com"}, 
       ... 
       ... 
}