Autorização do Google OAuth 2 – Erro: redirect_uri_mismatch

No site https://code.google.com/apis/console , registrei meu aplicativo, configurei o ID do cliente gerado e o Segredo do cliente no meu aplicativo e tentei fazer login com o Google. Infelizmente, recebi a mensagem de erro:

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 

O que significa esta mensagem e como posso corrigi-la? Eu uso a gem omniauth-google-oauth2 .

O URI de redirecionamento (para o qual a resposta é retornada) deve ser registrado no console de APIs e o erro indica que você não fez isso ou não o fez corretamente.

Vá para o console do seu projeto e procure em Acesso à API. Você deve ver seu ID de cliente e seu segredo lá, junto com uma lista de URIs de redirecionamento. Se o URI desejado não estiver listado, clique em editar configurações e adicione o URI à lista.

No meu caso, era www e non-www . O site real tinha o URL www e os URIs de redirecionamento autorizados no Google Developer Console non-www tinham URL non-www . Portanto, houve incompatibilidade na URI de redirecionamento. Eu o resolvi atualizando os Authorized Redirect URIs no Google Developer Console para o URL de www .

Outras incompatibilidades de URI comuns são:

  • Usando http:// em URIs de redirecionamento autorizado e https:// como URL real ou vice-versa
  • Uso de barra no final ( http://example.com/ ) em URIs de redirecionamento autorizados e não usar barra final ( http://example.com ) como URL real ou vice-versa

Veja as capturas de canvas passo a passo do Google Developer Console para que seja útil para aqueles que estão com dificuldades para localizar a página do console do desenvolvedor para atualizar os URIs de redirecionamento.

  1. Vá para https://console.developers.google.com

  2. Selecione seu projeto

Selecione seu projeto

  1. Clique no ícone do menu

Clique no ícone do menu

  1. Clique no menu API Manager

Selecione o menu Gerenciador de API

  1. Clique no menu Credentials . E, nas OAuth 2.0 Client IDs , você encontrará o nome do seu cliente. No meu caso, é o Web Client 1 . Clique nele e aparecerá um pop-up onde você pode editar as origens de Javascript autorizadas e os URIs de redirecionamento autorizados .

Selecione o menu Credenciais

Aqui está um artigo do Google sobre criação de projeto e ID de cliente .

Se você estiver usando o botão do JavaScript do Google+ , precisará usar a postmessage vez do URI real. Demorei quase o dia inteiro para entender isso, já que os documentos do Google não o afirmam claramente por algum motivo.

Para o meu aplicativo da web, corrigi meu erro escrevendo

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

Certifique-se de verificar o protocolo “http: //” ou “https: //” também como protocolo de verificação do google. Melhor adicionar o URL na lista.

Em qualquer stream em que você recuperou um código de autorização no lado do cliente, como a API GoogleAuth.grantOfflineAccess() , e agora deseja passar o código para seu servidor, resgatá-lo e armazenar os tokens de access e atualização, você terá para usar o postmessage string literal em vez do redirect_uri.

Por exemplo, construindo o trecho no documento 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"} 

A única documentação do Google que menciona postmessage é o antigo documento de login do Google+ . É absolutamente imperdoável que a página de documento para o Acesso off-line não mencione isso. #FacePalm

Isso parece bastante estranho e irritante que nenhuma solução “única” esteja lá. para mim http: // localhost: 8000 não funcionou, mas http: // localhost: 8000 / funcionou.

2015Julho15 – o login que estava funcionando na semana passada com este script no login

  

parou de funcionar e começou a causar erro 400 com Error: redirect_uri_mismatch

e na seção DETALHES: redirect_uri=storagerelay://...

Eu resolvi isso mudando para:

  

Quando você registra seu aplicativo em https://code.google.com/apis/console e faz um ID de cliente, você tem a chance de especificar um ou mais URIs de redirecionamento. O valor do parâmetro redirect_uri no seu URI de autenticação deve corresponder exatamente a um deles.

Lista de controle:

  • http ou https ?
  • & ou & ?
  • barra final ( / ) ou aberta ?
  • (CMD/CTRL)+F , procure a correspondência exata na página de credenciais. Se não for encontrado, procure o que está faltando.
  • Espere até o Google atualizá-lo. Pode acontecer em cada meia hora se você estiver mudando com freqüência ou pode ficar na piscina. No meu caso, era quase meia hora para entrar em vigor.

O URL de redirecionamento faz distinção entre maiúsculas e minúsculas.

No meu caso eu adicionei ambos: http: // localhost: 5023 / AuthCallback / IndexAsync http: // localhost: 5023 / authcallback / indexasync

Usuários do Rails (do omniauth-google-oauth2 docs):

Incompatibilidade do Protocolo de Fixação para redirect_uri no Rails

Basta definir o full_host no OmniAuth com base no Rails.env.

# config / initializers / omniauth.rb

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

LEMBRE-SE: Não inclua o “/” final

No meu caso, meu tipo de aplicativo de credencial é “Outro”. Por isso, não consigo encontrar Authorized redirect URIs na página de credenciais. Parece aparece no tipo de aplicativo: “aplicativo da Web”. Mas você pode clicar no botão Download JSON para obter o arquivo client_secret.json . insira a descrição da imagem aqui

Abra o arquivo json e você pode encontrar o parâmetro da seguinte forma: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] . Eu escolhi usar http: // localhost e funciona bem para mim.

Se você usar este tutorial: https://developers.google.com/identity/sign-in/web/server-side-flow , deverá usar “postmessage”.

Em GO isso resolveu o problema:

 confg = &oauth2.Config{ RedirectURL: "postmessage", ClientID: ..., ClientSecret: ..., Scopes: ..., Endpoint: google.Endpoint, } 

Deixe-me completar a resposta do @Bazyl: na mensagem que recebi, eles mencionaram o URI "http://localhost:8080/" (que, claro, parece uma configuração interna do google). Eu mudei o URI autorizado para aquele, "http://localhost:8080/" , e a mensagem não apareceu mais … E o vídeo foi carregado … A documentação do APIS é MUITO manca … Toda vez Eu tenho algo trabalhando com google apis, eu simplesmente sinto “sorte”, mas há uma falta de boa documentação sobre isso …. 🙁 Sim, eu tenho que trabalhar, mas eu ainda não entendo nem por que ele falhou, nem Por que funcionou … Havia apenas um lugar para confirmar o URI na web, e ele foi copiado no client_secrets.json … Eu não entendo se há um terceiro lugar onde se deve escrever o mesmo URI. Eu não acho apenas a documentação, mas também o design GUI da API do Google bastante coxo …

Qualquer pessoa que esteja com dificuldades para descobrir onde definir URLs de redirecionamento no novo console: APIs e Auth -> Credentials -> IDs de cliente do OAuth 2.0 -> clique no link para encontrar todos os URLs de redirecionamento

Nenhuma das soluções acima funcionou para mim. abaixo fez

alterar URLs de redirecionamento autorizados para – https: // localhost: 44377 / signin-google

Espero que isso ajude alguém.

Cuidado com o extra / no final da URL http://localhost:8000 é diferente de http://localhost:8000/

O erro REDIRECT_URI_MISMATCH ocorre quando o URL de redirecionamento definido para seu aplicativo no serviço de autorização não corresponde ao valor do parâmetro “redirect_uri” passado por sua solicitação.

Se você se deparar com esse erro ao integrar o OAuth2 com o Spring Boot , use uma destas soluções:

  1. Defina [ip]: [port] / login como um URL de redirecionamento no serviço de autorização. Sabendo que você não modifica o URL de retorno de chamada padrão usado pelo Spring Security.
  2. OU configure um URL de retorno de chamada customizado por meio da configuração dos seguintes atributos em application.properties :

security.oauth2.client.preEstablishedRedirectUri = http: // localhost: 9090 / callback

security.oauth2.client.useCurrentUri = false

Em seguida, defina http: // localhost: 9090 / callback como um URL de redirecionamento para seu aplicativo no google api.

Fonte: Spring Boot – Como resolver o OAuth2 REDIRECT_URI_MISMATCH

Tente fazer essas verificações:

  1. ID do pacote no console e no seu aplicativo. Eu prefiro definir o ID do pacote de inscrição como “org.peredovik. $ {PRODUCT_NAME: rfc1034identifier}”
  2. Verifique se você adicionou tipos de URL na guia Informações, basta digitar sua ID de pacote em Identificador e Esquemas de URL, function definida como Editor
  3. No console do cloud.google.com “APIs & auth” -> “Tela de consentimento”, preencha o formulário sobre seu aplicativo. “Nome do produto” é campo obrigatório.

Apreciar 🙂

No meu caso eu tive que verificar o tipo de ID do cliente para aplicativos da web / aplicativos instalados.

aplicativos instalados: http: // localhost [Redirecionar URIs] Nesse caso, o localhost simplesmente funciona

aplicativos da web: você precisa de um nome de domínio válido [Redirecionar URIs:]

O que você precisa fazer é voltar ao seu console do desenvolvedor e acessar a canvas APIs e Auth> Consent e preenchê-lo. Especificamente, o nome do produto.

Não esqueça de include o caminho depois do seu domínio e ip. No meu caso, eu esqueci:

/ oauth2callback

Eu tinha dois URIs de solicitação no console, http: // xxxxx / client / api / planilha / authredirect e http: // localhost .

Eu tentei todas as principais respostas a essa pergunta e confirmei que nenhuma delas era problema meu.

Eu removi localhost do console, atualizei meu client_secret.json em meu projeto e o erro de incompatibilidade desapareceu.

Eu tive o mesmo problema com o google login, eu estava prestes a puxar meus cabelos !!! Eu tinha inserido corretamente meus retornos de chamada no painel Credencial do google no console do desenvolvedor do Google. Aqui estavam meus URLs de redirecionamento:

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

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

https://www.example.com/oauth2callback

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

tudo parece bem certo? mas ainda não funcionou até que eu adicionei mais um Url mágico Eu adicionei o URL do signin-google (que é callback padrão do google) sem www e problema resolvido.

Levar isso em conta (dependendo do seu domínio) você pode ou não precisar adicionar com e sem www urls

Eu precisava criar um novo ID de cliente em APIs e serviços -> Credenciais -> Criar credenciais -> OAuth -> Outros

Então eu baixei e usei o client_secret.json com o meu programa de linha de comando que está fazendo o upload para a minha conta do youtube. Eu estava tentando usar um ID de cliente OAuth do Web App que estava me dando o erro de URI de redirecionamento no navegador.

ATUALIZADO -> TRABALHO para aplicativos Android

Apenas use:

http: // localhost / oauth2callback

se você lida com sua própria lógica sem link de redirecionamento para aplicativos da web