solucionar solucion redirect_uri_mismatch playground google error developer como auth authentication oauth-2.0

authentication - solucion - Autorización de Google OAuth 2-Error: redirect_uri_mismatch



google oauth demo (27)

2015 de julio de 2015: el inicio de sesión que estaba funcionando la semana pasada con este script en el inicio de sesión

<script src="https://apis.google.com/js/platform.js" async defer></script>

dejó de funcionar y comenzó a causar el error 400 con Error: redirect_uri_mismatch

y en la sección DETALLES: redirect_uri=storagerelay://...

Lo resolví cambiando a

<script src="https://apis.google.com/js/client:platform.js?onload=startApp"></script>

En el sitio web https://code.google.com/apis/console registré mi aplicación, configuré el ID de Cliente generado y el Secreto de Cliente en mi aplicación e intenté iniciar sesión con Google. Desafortunadamente, recibí el mensaje de error:

Error: redirect_uri_mismatch The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email response_type=code redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback access_type=offline approval_prompt=force client_id=generated_id

¿Qué significa este mensaje y cómo puedo solucionarlo? Yo uso la gema omniauth-google-oauth2 .


Asegúrese de verificar el protocolo "http: //" o "https: //" como protocolo de google también. Mejor añadir ambas URL en la lista.


Cualquier persona que tenga dificultades para encontrar dónde establecer las URL de redireccionamiento en la nueva consola: API y autenticación -> Credenciales -> ID de cliente de OAuth 2.0 -> Haga clic en el enlace para encontrar todas sus URL de redireccionamiento


Cuando registra su aplicación en https://code.google.com/apis/console y crea un ID de cliente, tiene la oportunidad de especificar uno o más URI de redireccionamiento. El valor del parámetro redirect_uri en su URI de autenticación tiene que coincidir con uno de ellos exactamente.


El URI de redireccionamiento (donde se devuelve la respuesta) debe registrarse en la consola de las API, y el error indica que no lo ha hecho o que no lo ha hecho correctamente.

Vaya a la consola de su proyecto y busque en Acceso a la API. Debería ver su ID de cliente y su secreto allí, junto con una lista de URI de redireccionamiento. Si el URI que desea no está en la lista, haga clic en editar configuración y agregue el URI a la lista.


En cualquier flujo en el que recuperó un código de autorización en el lado del cliente, como la API GoogleAuth.grantOfflineAccess() , y ahora desea pasar el código a su servidor, canjearlo, y almacenar los tokens de acceso y actualización, entonces tiene para utilizar la cadena literal postmessage lugar de redirect_uri.

Por ejemplo, construyendo sobre el fragmento en el documento de Ruby :

client_secrets = Google::APIClient::ClientSecrets.load(''client_secrets.json'') auth_client = client_secrets.to_authorization auth_client.update!( :scope => ''profile https://www.googleapis.com/auth/drive.metadata.readonly'', :redirect_uri => ''postmessage'' # <---- HERE ) # Inject user''s auth_code here: auth_client.code = "4/lRCuOXzLMIzqrG4XU9RmWw8k1n3jvUgsI790Hk1s3FI" tokens = auth_client.fetch_access_token! # { "access_token"=>..., "expires_in"=>3587, "id_token"=>..., "refresh_token"=>..., "token_type"=>"Bearer"}

La única documentación de Google que incluso menciona el postmessage es este antiguo documento de inicio de sesión de Google+ . Es absolutamente imperdonable que la página de documentos para el Acceso sin conexión no lo mencione. #FacePalm


En mi caso era www y URL non-www . El sitio real tenía la URL de www y los URI de redirección autorizados en la Consola de desarrollador de Google tenían non-www URL que non-www . Por lo tanto, hubo desajuste en la redirección de URI. Lo resolví actualizando los Authorized Redirect URIs en la Consola de desarrollador de Google a la URL de www .

Otros desajustes URI comunes son:

  • Uso de http:// en URI de redireccionamiento autorizado y https:// como URL real, o viceversa
  • Uso de la barra diagonal ( http://example.com/ ) en los URI de redireccionamiento autorizados y no se usa la barra diagonal ( http://example.com ) como URL real, o viceversa

Aquí están las capturas de pantalla paso a paso de la Consola de desarrollador de Google para que sea útil para aquellos que tienen dificultades para ubicar la página de la consola de desarrollador para actualizar los URI de redireccionamiento.

  1. Vaya a https://console.developers.google.com

  2. Seleccione su proyecto

  1. Haga clic en el icono del menú.

  1. Haga clic en el menú API Manager

  1. Haga clic en el menú Credentials . Y bajo OAuth 2.0 Client IDs , encontrará el nombre de su cliente. En mi caso, es Web Client 1 . Haga clic en él y aparecerá una ventana emergente donde podrá editar el origen autorizado de Javascript y los URI de redireccionamiento autorizados .

Aquí hay un artículo de Google sobre la creación de proyectos y la identificación del cliente .


En mi caso tuve que verificar el tipo de ID de cliente para las aplicaciones web / instaladas.

aplicaciones instaladas: http: // localhost [Redirect URIs] En este caso, localhost simplemente funciona

aplicaciones web: necesita un nombre de dominio válido [Redirigir URI:]


En mi caso, mi tipo de solicitud de credencial es "Otro". Por lo tanto, no puedo encontrar los Authorized redirect URIs en la página de credenciales. Parece que aparece en el tipo de aplicación: "Aplicación web". Pero puede hacer clic en el botón Download JSON para obtener el archivo client_secret.json .

Abra el archivo json y encontrará el parámetro así: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] . Elijo usar http: // localhost y funciona bien para mí.




Lista de verificación:

  • http o https ?
  • & o &amp; ?
  • barra inclinada ( / ) o abierta ?
  • (CMD/CTRL)+F , busca la coincidencia exacta en la página de credenciales. Si no se encuentra, busque el que falta.
  • Espera hasta que google lo actualice. Puede suceder en cada media hora si cambia con frecuencia o puede permanecer en la piscina. En mi caso, tardó casi media hora en entrar en vigor.

Lo que debe hacer es volver a la Consola de desarrollador, ir a APIs & Auth> Consent Screen y completar eso. Específicamente, el nombre del producto.


Necesitaba crear un nuevo ID de cliente en API y servicios -> Credenciales -> Crear credenciales -> OAuth -> Otro

Luego descargué y utilicé client_secret.json con mi programa de línea de comandos que se está cargando en mi cuenta de YouTube. Estaba intentando usar un ID de cliente de la aplicación web OAuth que me estaba dando el error de redireccionamiento URI en el navegador.


Ninguna de las soluciones anteriores funcionó para mí. abajo hizo

cambiar las direcciones URL de redireccionamiento autorizadas a - https://localhost:44377/signin-google

Espero que esto ayude a alguien.


No olvides incluir la ruta después de tu dominio e ip. En mi caso, me olvidé:

/ oauth2callback


Para mi aplicación web he corregido mi error escribiendo

instead of : http://localhost:11472/authorize/ type : http://localhost/authorize/


Permítame completar la respuesta de @Bazyl: en el mensaje que recibí, mencionaron el URI "http://localhost:8080/" (que, por supuesto, parece una configuración interna de Google). Cambié el URI autorizado para ese "http://localhost:8080/" , y el mensaje ya no apareció ... Y el video se cargó ... La documentación de APIS es MUY coja ... Cada vez Tengo algo que funciona con google apis, simplemente me siento "afortunado", pero falta una buena documentación al respecto ... :( Sí, lo tengo funcionando, pero todavía no entiendo por qué falló, ni por qué funcionó ... Había un solo lugar para confirmar el URI en la web, y se copió en el archivo client_secrets.json ... No entiendo si hay un TERCER lugar donde se debe escribir el mismo URI ... . No encuentro solo la documentación, sino también el diseño GUI de la API de Google bastante aburrido ...


Si está utilizando el botón de javascript de Google+ , entonces tiene que usar postmessage lugar del URI real. Me tomó casi todo el día resolver esto ya que los documentos de Google no lo explican claramente por alguna razón.



Trate de hacer estas comprobaciones:

  1. Bundle ID en consola y en tu aplicación. Prefiero configurar el ID de paquete de la aplicación como esta "org.peredovik. $ {PRODUCT_NAME: rfc1034identifier}"
  2. Verifique si ha agregado tipos de URL en la pestaña Información, simplemente escriba su ID de paquete en el Identificador y los Esquemas de URL, con el rol establecido en Editor
  3. En la consola en cloud.google.com "APIs y autenticación" -> "Pantalla de consentimiento", complete el formulario sobre su aplicación. El campo "Nombre del producto" es obligatorio.

Disfrutar :)


Tuve dos solicitudes de URI en la consola, http://xxxxx/client/api/spreadsheet/authredirect y http: // localhost .

Probé todas las respuestas principales a esta pregunta y confirmé que ninguna de ellas era mi problema.

Quité localhost de la consola, actualicé mi client_secret.json en mi proyecto y el error de falta de coincidencia desapareció.


Tuve el mismo problema con el inicio de sesión de Google, estaba a punto de arrancarme los pelos. Había ingresado correctamente mis devoluciones de llamada en el panel de credenciales de Google en la consola de desarrolladores de Google, aquí estaban mis URL de redireccionamiento:

https://www.example.com/signin-google

https://www.example.com/signin-google/

https://www.example.com/oauth2callback

https://www.example.com/oauth2callback/

todo parece estar bien verdad? pero aún no funcionó hasta que agregué una Url mágica más. Agregué signin-google url (que es la devolución de llamada predeterminada de Google) sin www y el problema resuelto.

téngalo en cuenta (dependiendo de su dominio) puede o no necesitar agregar ambos URL con y sin www


Usuarios de Rails (de la omniauth-google-oauth2 ):

Corrección del desajuste del protocolo para redirect_uri en Rails

Simplemente configure el full_host en OmniAuth basado en Rails.env.

# config / initializers / omniauth.rb

OmniAuth.config.full_host = Rails.env.production? ? '' https://domain.com '': '' http: // localhost: 3000 ''

RECUERDE: No incluya la "/" que se arrastra


cuidado con el extra / al final de la url http://localhost:8000 es diferente de http://localhost:8000/


para mí fue porque en la lista de ''URI de redirección autorizada'' he colocado incorrectamente https://developers.google.com/oauthplayground/ lugar de https://developers.google.com/oauthplayground (sin / al final) .


ACTUALIZADO -> TRABAJANDO para aplicaciones de Android

Solo usa:

http://localhost/oauth2callback

Si maneja su propia lógica sin redirigir enlace para aplicaciones web