Отказался отображать в кадре, потому что он установил «X-Frame-Options» на «SAMEORIGIN»

209

Я разрабатываю веб-сайт, который должен быть отзывчивым, чтобы люди могли получить к нему доступ со своих телефонов. На сайте есть некоторые защищенные части, которые могут быть зарегистрированы в Google, Facebook,... и т.д. (OAuth).

Бэкэнд сервера разработан с использованием ASP.Net Web API 2, а передний конец - в основном AngularJS с некоторыми Razor.

Для части аутентификации все работает нормально во всех браузерах, включая Android, но аутентификация Google не работает на iPhone, и она дает мне это сообщение об ошибке

Refused to display 'https://accounts.google.com/o/openid2/auth
?openid.ns=http://specs.openid.ne…tp://axschema.org/namePerson
/last&openid.ax.required=email,name,first,last'
in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

Теперь, насколько мне известно, я не использую iframe в своих HTML файлах.

Я googled вокруг, но никакой ответ не заставил меня решить проблему.

  • 0
    iframes иногда используются службами, к которым вы подключаетесь, даже если они не видны (на первый взгляд)
Теги:
asp.net-web-api
google-oauth

11 ответов

78
Лучший ответ

O.K. потратив больше времени на это с помощью этого SO post

Преодоление "Отображение запрещено с помощью X-Frame-Options"

Мне удалось решить проблему, добавив &output=embed в конец URL-адреса перед отправкой на URL-адрес google:

var url = data.url + "&output=embed";
window.location.replace(url);
  • 1
    на самом деле это для OAUTH, как я уже говорил в моем первоначальном посте. и до сих пор в OAUTH 2.0. Тем не менее, Google изменил свои настройки, чтобы использовать службу, поэтому теперь вам придется изменить некоторые свойства, чтобы использовать OAUTH 2.0, как это имеет место в промежуточном программном обеспечении OWIN 3.0. Обратитесь по этой ссылке, если вы получаете сообщение об ошибке «access_denied». blogs.msdn.com/b/webdev/archive/2014/07/02/...
  • 1
    @AliHmer Спасибо большое, приятель. Вы спасли мой день :) & output = embed работал как шарм для меня .. :)
Показать ещё 2 комментария
148

Я нашел лучшее решение, может быть, это может помочь кому-то замените "watch?v=" на "v/" и он будет работать

var url = url.replace("watch?v=", "v/");
  • 0
    Добро пожаловать :) Рад, что это помогло вам
  • 41
    Вы также можете изменить это, чтобы использовать «embed /» вместо «v /», чтобы полный URL стал: <iframe width='1080' height='760' src="https://www.youtube.com/embed/dQw4w9WgXcQ" frameborder="0" allowfullscreen></iframe>
Показать ещё 5 комментариев
25

Попробуйте использовать

https://www.youtube.com/embed/YOUR_VIDEO_CODE

Вы можете найти весь встроенный код в разделе "Встроенный код", и это выглядит как

<iframe width="560" height="315"  src="https://www.youtube.com/embed/YOUR_VIDEO_CODE" frameborder="0" allowfullscreen></iframe>
24

В этом случае они устанавливают заголовок SAMEORIGIN, что означает, что они запретили загрузку ресурса в iframe за пределами своего домена. Таким образом, этот iframe не может отображать кросс-домен

Изображение 3680

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

Если вы используете apache, то в файле httpd.conf.

  <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>
  • 2
    Каков your_relative_path ?
  • 2
    Что это ваш_относительный_путь?
16

Если вы используете iframe для vimeo, измените URL-адрес:

https://vimeo.com/63534746

в

http://player.vimeo.com/video/63534746

Это работает для меня.

11

Для встраивания видео youtube в вашу страницу с угловыми углами вы можете просто использовать следующий фильтр для своего видео

app.filter('scrurl', function($sce) {
    return function(text) {
        text = text.replace("watch?v=", "embed/");
        return $sce.trustAsResourceUrl(text);
    };
});
<iframe class="ytplayer" type="text/html" width="100%" height="360" src="{{youtube_url | scrurl}}" frameborder="0"></iframe>
4

Я сделал следующие изменения и отлично работал у меня.

Просто добавьте атрибут <iframe src="URL" target="_parent" />

_parent: это откроет встроенную страницу в том же окне.

_blank: на другой вкладке

  • 0
    Я не знаю, насколько уместен этот ответ на исходный вопрос, но в моем случае, в другом контексте, он обеспечил решение
3

Для меня было исправлено переключение на console.developer.google.com и добавление домена приложения в раздел "Javascript Origins" учетных данных OAuth 2.

2

Спасибо за вопрос. Для YouTube iframe первая проблема - это URL, который вы указали, это встроенный URL-адрес или URL-адрес из адресной строки. эту ошибку для не вставляемого URL-адреса, но если вы хотите указать не внедряемый URL-адрес, вам необходимо ввести код в "безопасную трубу" (как для неинтегрированного, так и для внедренного URL-адреса):

import {Pipe, PipeTransform} from '@angular/core';
import {DomSanitizer} from '@angular/platform-browser';

@Pipe({name: 'safe'})
export class SafePipe implements PipeTransform {

constructor(private sanitizer: DomSanitizer) {

}

transform(value: any, url: any): any {
    if (value && !url) {
        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
        let match = value.match(regExp);
        if (match && match[2].length == 11) {
            console.log(match[2]);
            let sepratedID = match[2];
            let embedUrl = '//www.youtube.com/embed/' + sepratedID;
            return this.sanitizer.bypassSecurityTrustResourceUrl(embedUrl);
        }

     }

   }
}

он разделит "vedioId". Вы должны получить идентификатор видео, а затем установить URL как встроенный. В Html

 <div>
   <iframe width="100%" height="300" [src]="video.url | safe"></iframe>
 </div>

Угловая 2/5 еще раз спасибо.

2

Немного поздно, но эта ошибка также может быть вызвана, если вы используете native application Client ID вместо web application Client ID.

  • 0
    Что вы имеете в виду? Я также заметил, что фрейм работает в окне Safari, но не в iframe веб-приложения, но как вы это измените?
  • 0
    Моя проблема была похожей: при создании идентификатора клиента веб-приложения я не включил Uris своего веб-сайта в два раздела, которые вы указали при создании идентификатора клиента в консоли разработчиков Google.
0

Есть решение, которое сработало для меня, ссылаясь на родителя. После получения URL-адреса, который будет перенаправлен на страницу аутентификации Google, вы можете попробовать следующий код:

var loc = redirect_location;      
window.parent.location.replace(loc);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню