solucion sameorigin htaccess deny because allow all angularjs asp.net-web-api google-oauth

angularjs - htaccess - Se negó a mostrarse en un marco porque configuró ''X-Frame-Options'' en ''SAMEORIGIN''



x-frame-options nginx (11)

Aceptar, después de pasar más tiempo en esto con la ayuda de esta publicación SO

Superación de "Visualización prohibida por X-Frame-Options"

Logré resolver el problema agregando &output=embed al final de la URL antes de publicar en la URL de Google:

var url = data.url + "&output=embed"; window.location.replace(url);

Estoy desarrollando un sitio web que se supone que debe responder para que las personas puedan acceder a él desde sus teléfonos. El sitio tiene algunas partes seguras en las que se puede iniciar sesión utilizando Google, Facebook, etc. (OAuth).

El servidor backend se desarrolla utilizando ASP.Net Web API 2 y la interfaz es principalmente AngularJS con algo de Razor.

Para la parte de autenticación, todo funciona bien en todos los navegadores, incluido Android, pero la autenticación de Google no funciona en el iPhone y aparece este mensaje de error.

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''.

Ahora, en lo que a mí respecta, no uso ningún iframe en mis archivos HTML.

Busqué en Google, pero ninguna respuesta me hizo arreglar el problema.


En este caso, han establecido el encabezado en SAMEORIGIN, lo que significa que no han permitido cargar el recurso en un iframe fuera de su dominio. Así que este iframe no puede mostrar dominio cruzado

Para este propósito, debe coincidir con la ubicación en su apache o cualquier otro servicio que esté utilizando

Si está utilizando apache entonces en el archivo 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>


Encontré una solución mejor, tal vez pueda ayudar a alguien a reemplazar "watch?v=" por "v/" y funcionará

var url = url.replace("watch?v=", "v/");


Gracias por la pregunta. Para el iframe de YouTube, el primer problema es la URL que proporcionó, es la URL incrustada o el enlace de la URL desde la barra de direcciones. este error para la URL no incrustada, pero si desea dar una URL no incrustada, necesita codificar en "Pipe seguro" como (para la URL incrustada o no incrustada):

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); } } } }

se dividirá "vedioid". Tienes que obtener el ID de video y luego configurarlo en URL como incrustado. En html

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

Angular 2/5 gracias de nuevo.


Hay una solución que funcionó para mí, refiriéndose a los padres. Después de obtener la URL que redireccionará a la página de autenticación de Google, puede probar el siguiente código:

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


Hice los siguientes cambios y funciona bien para mí.

Solo agregue el atributo <iframe src="URL" target="_parent" />

_parent : esto abriría la página incrustada en la misma ventana.

_blank : en otra pestaña


Para incrustar el video de YouTube en su página angularjs, simplemente puede usar el siguiente filtro para su video

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>


Para mí, la solución fue ir a console.developer.google.com y agregar el dominio de la aplicación a la sección "Orígenes de Javascript" de las credenciales de OAuth 2.


Poco tarde, pero este error también puede ser causado si utiliza una native application Client ID lugar de una web application Client ID .



Tratar de usar

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

Puede encontrar todo el código incrustado en la sección ''Código incrustado'' y se ve así

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