No site https://code.google.com/apis/console , registrei meu aplicativo, configurei o Client ID gerado e o Client Secret no meu aplicativo e tentei fazer login no 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 essa mensagem e como posso corrigi-la? Eu uso a gema omniauth-google-oauth2 .
authentication
oauth-2.0
google-signin
user984621
fonte
fonte
https://accounts.google.com/o/oauth2/auth?client_id={client_id}&response_type=token&redirect_uri={redirect_uri}&scope={scope}
em um navegador, em vez de executar todo o aplicativo para teste.Respostas:
O URI de redirecionamento (para o qual a resposta é retornada) deve ser registrado no console das APIs e o erro indica que você não fez isso ou não fez corretamente.
Vá para o console do seu projeto e procure em Acesso à API. Você deve ver seu
client ID
&client secret
ali, junto com uma lista de URIs de redirecionamento. Se o URI que você deseja não estiver listado, clique em editar configurações e adicione o URI à lista.EDIT: (a partir de um comentário altamente classificado abaixo) Observe que a atualização do console da API do Google e a alteração presente podem levar algum tempo. Geralmente apenas alguns minutos, mas às vezes parece mais longo.
fonte
No meu caso, era
www
enon-www
URL. O site real tinhawww
URL e os URIs de redirecionamento autorizado no Google Developer Console tinhamnon-www
URL. Portanto, houve incompatibilidade no URI de redirecionamento. Eu o resolvi atualizandoAuthorized Redirect URIs
no Google Developer Console parawww
URL.Outras incompatibilidades comuns de URI são:
http://
em URIs de redirecionamento autorizado ehttps://
como URL real ou vice-versahttp://example.com/
) em URIs de redirecionamento autorizado e não usando barra final (http://example.com
) como URL real ou vice-versaAqui estão as capturas de tela passo a passo do Google Developer Console, para que seja útil para aqueles que estão com dificuldade em localizar a página do console do desenvolvedor para atualizar os URIs de redirecionamento.
Aqui está um artigo do Google sobre a criação de projeto e ID do cliente .
fonte
Se você estiver usando o botão javascript do Google+ , precisará usar em
postmessage
vez do URI real. Levei quase o dia inteiro para descobrir isso, pois os documentos do Google não afirmam claramente por algum motivo.fonte
Error: invalid_request
origin parameter is required!
$client->setRedirectUri('postmessage');
vez de$client->setRedirectUri('http://your.url...');
Em qualquer fluxo em que você recuperou um código de autorização no lado do cliente, como a
GoogleAuth.grantOfflineAccess()
API , e agora deseja passar o código para o servidor, resgatá-lo e armazenar os tokens de acesso e atualização, é necessário usar a cadeia literalpostmessage
em vez do redirect_uri.Por exemplo, desenvolvendo o snippet no documento Ruby :
A única documentação do Google a mencionar
postmessage
é esse antigo documento de login do Google+ . Aqui está um link de captura de tela e arquivo, uma vez que o G + está sendo fechado e esse link provavelmente desaparecerá:É absolutamente imperdoável que a página de documento do Acesso offline não mencione isso. #FacePalm
fonte
postmessage
, mas eu queria dar as circunstâncias específicas (por exemplograntOfflineAccess
) de quando esse hack louco e sem documentos era necessário para mim. : PI também não queria que isso fosse verdade. :) Me custou horas de dor de cabeça.Para meu aplicativo da Web, corrigi meu erro escrevendo
fonte
Verifique o protocolo "http: //" ou "https: //", pois o Google também verifica o protocolo. Melhor adicionar os dois URLs na lista.
fonte
Parece estranho e irritante que nenhuma solução "única" esteja lá. para mim http: // localhost: 8000 não deu certo, mas http: // localhost: 8000 / deu certo.
fonte
redirect_uri
deve ser uma correspondência exata no console do desenvolvedor e no seu aplicativo.Ao registrar seu aplicativo em https://code.google.com/apis/console e criar um ID de cliente, você pode especificar um ou mais URIs de redirecionamento. O valor do
redirect_uri
parâmetro no seu URI de autenticação deve corresponder exatamente a um deles.fonte
https://code.google.com/apis/console
não é válido maisEssa resposta é a mesma que a resposta de Mike e Jeff , ambas configuradas
redirect_uri
parapostmessage
no lado do cliente. Quero acrescentar mais sobre o lado do servidor e também as circunstâncias especiais aplicáveis a essa configuração.Pilha de tecnologia
Processo interno
A parte dianteira
create-react-app
versão 2.1.5O fluxo "Código" (especificamente para o Google OAuth2)
Resumo: Reaja -> solicite o código de autenticação social -> solicite o token jwt para adquirir o status de "login" em termos de seu próprio servidor / banco de dados back-end.
responseType="code"
para obter um código de autorização. (não é token, não é token de acesso!)react-google-login
mencionado acima.{ "provider": "google-oauth2", "code": "your retrieved code here", "redirect_uri": "postmessage" }
REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI
,REST_SOCIAL_DOMAIN_FROM_ORIGIN
eREST_SOCIAL_OAUTH_REDIRECT_URI
no do Djangosettings.py
são desnecessárias . (São constantes usadas pelo Auth Social do Django REST) Em resumo, você não precisa configurar nada relacionado ao redirecionamento de URL no Django . O"redirect_uri": "postmessage"
front-end do React é suficiente. Isso faz sentido, porque o trabalho de autenticação social que você deve executar é todo pedido POST no estilo Ajax no frontend, sem enviar nenhum formulário, portanto, na verdade, nenhum redirecionamento ocorre por padrão. É por isso que o URL de redirecionamento se torna inútil se você estiver usando o código + fluxo JWT, e a configuração do URL de redirecionamento do lado do servidor não está afetando.youremailprefix717e248c5b924d60
seu email[email protected]
. Anexa alguma sequência aleatória para criar um nome de usuário exclusivo. Esse é o comportamento padrão, acredito que você pode personalizá-lo e sinta-se à vontade para pesquisar na documentação deles.Authorization
cabeçalho e enviar uma solicitação ao back-end, o Django back-end agora reconhecerá isso como um login, ou seja, autenticado do utilizador. Obviamente, se seu token expirar, você deverá atualizá-lo fazendo outra solicitação.Oh meu Deus, eu passei mais de 6 horas e finalmente entendi direito! Eu acredito que esta é a primeira vez que vi essa
postmessage
coisa. Qualquer pessoa que trabalhe em umaDjango + DRF + JWT + Social Auth + React
combinação definitivamente irá se deparar com isso. Não acredito que nenhum dos artigos mencionados mencione isso, exceto as respostas aqui. Mas eu realmente espero que este post possa economizar muito tempo se você estiver usando a pilha do Django + React.fonte
2015July15 - o login que estava funcionando na semana passada com este script no login
parou de funcionar e começou a causar o Erro 400 com
Error: redirect_uri_mismatch
e na seção DETALHES:
redirect_uri=storagerelay://...
eu o resolvi mudando para:
fonte
Lista de controle:
http
ouhttps
?&
ou&
?/
) ou aberta?
(CMD/CTRL)+F
, pesquise a correspondência exata na página de credenciais. Se não for encontrado, procure o que está faltando.fonte
No meu caso, meu tipo de aplicativo de credencial é "Outro". Portanto, não consigo encontrar
Authorized redirect URIs
na página de credenciais. Parece aparecer em Tipo de aplicativo: "Aplicativo da Web". Mas você pode clicar noDownload JSON
botão para obter oclient_secret.json
arquivo.Abra o arquivo json, e você pode encontrar o parâmetro como este:
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
. Eu escolho usar http: // localhost e funciona bem para mim.fonte
O URL de redirecionamento diferencia maiúsculas de minúsculas.
No meu caso, adicionei os dois: http: // localhost: 5023 / AuthCallback / IndexAsync http: // localhost: 5023 / authcallback / indexasync
fonte
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.
fonte
cuidado com o extra
/
no final do URLhttp://localhost:8000
é diferente dehttp://localhost:8000/
fonte
Usuários do Rails (dos documentos omniauth-google-oauth2 ):
LEMBRE-SE: Não inclua o "/" à direita
fonte
Se você usar este tutorial: https://developers.google.com/identity/sign-in/web/server-side-flow , use "postmessage".
No GO, isso corrigiu o problema:
fonte
para mim, foi porque na lista 'URIs de redirecionamento autorizado' que coloquei incorretamente em
https://developers.google.com/oauthplayground/
vez dehttps://developers.google.com/oauthplayground
(sem/
no final).fonte
Deixe-me completar a resposta de @ Bazyl: na mensagem que recebi, eles mencionaram o URI
"http://localhost:8080/"
(que, naturalmente, parece uma configuração interna do Google). Alterei o URI autorizado para esse"http://localhost:8080/"
e a mensagem não apareceu mais ... E o vídeo foi enviado ... A documentação do APIS é MUITO ruim ... Toda vez que tenho algo trabalhando com API do Google, simplesmente sinto-me "sortudo", mas há uma falta de boa documentação sobre isso .... :( Sim, consegui que funcionasse, mas ainda não entendo por que ele falhou nem por que funcionou ... Havia apenas UM local para confirmar o URI na Web e ele foi copiado no client_secrets.json ... Eu não entendo se existe um TERCEIRO lugar onde se deve escrever o mesmo URI ... Não encontro nem apenas a documentação, mas também a documentação. GUI design do Google 'fonte
Qualquer pessoa que esteja tentando encontrar onde definir URLs de redirecionamento no novo console: APIs e autenticação -> Credenciais -> IDs de cliente do OAuth 2.0 -> Clique no link para encontrar todos os URLs de redirecionamento
fonte
Eu precisava criar um novo ID de cliente em APIs e serviços -> Credenciais -> Criar credenciais -> OAuth -> Outro
Depois baixei e usei o client_secret.json com o meu programa de linha de comando que está sendo carregado na minha conta do youtube. Eu estava tentando usar um ID de cliente OAuth do aplicativo Web que estava me fornecendo o erro de URI de redirecionamento no navegador.
fonte
Tente fazer essas verificações:
Desfrutar :)
fonte
No meu caso, tive que verificar o tipo de ID do cliente para aplicativos da web / aplicativos instalados.
aplicativos instalados: http: // localhost [Redirecionar URIs] Nesse caso, localhost simplesmente funciona
aplicativos da web: você precisa de um nome de domínio válido [URIs de redirecionamento:]
fonte
O que você precisa fazer é voltar para o console do desenvolvedor e acessar APIs e autenticação> Tela de consentimento e preenchê-lo. Especificamente, o nome do produto.
fonte
Não se esqueça de incluir o caminho após o seu domínio e ip. No meu caso, esqueci:
/ oauth2callback
fonte
Eu tinha dois URIs de solicitação no console, http: // xxxxx / client / api / spreadsheet / authredirect e http: // localhost .
Tentei todas as principais respostas a essa pergunta e confirmei que nenhuma delas era meu problema.
Eu removi o host local do console, atualizei meu client_secret.json no meu projeto e o erro de incompatibilidade desapareceu.
fonte
Eu tive o mesmo problema com o login do google, estava prestes a puxar meus cabelos !!! Eu inseri corretamente meus retornos de chamada no painel Credenciais 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 né? mas ainda não funcionou até eu adicionar mais um URL mágico . Adicionei signin-google url (que é o retorno de chamada padrão do google) sem www e com o problema resolvido.
leve em consideração (dependendo do seu domínio), você pode ou não precisar adicionar ambos com e sem URLs www
fonte
Eu tenho aplicativo de front-end e API de back-end.
No meu servidor back-end, eu estava testando ao acessar a API do Google e estava enfrentando esse erro. Durante todo o meu tempo, fiquei pensando sobre o porquê de precisar dar,
redirect_uri
pois esse é apenas o back-end, pois o front-end faz sentido.O que eu estava fazendo era dar diferente
redirect_uri
(embora válido) ao servidor (supondo que seja apenas um espaço reservado, ele só precisa ser registrado no google), mas meu URL de front-end que criou o código do token era diferente. Então, quando eu estava passando esse código no meu teste do lado do servidor (para o qual redirecionar-uri era diferente), estava enfrentando esse erro.Portanto, não cometa esse erro. Verifique se o seu front
redirect_uri
- end é igual ao do servidor e o google o usa para validar a autenticidade.fonte
Abaixo estão os motivos do erro: ocorre o redirect_uri_mismatch:
Recomendado para usar o URL do domínio
fonte
O truque é inserir o URL de redirecionamento correto no momento da criação do ID. Descobri que atualizar o URL de redirecionamento depois que o ID foi criado por meio de um 'Editar' simplesmente não faz o trabalho. O que também funcionou para mim é duplicar toda a pasta 'vendor' e copiá-la para o mesmo local em que o arquivo 'oauth' está (apenas até você gerar o token com sucesso e excluir a pasta 'vendor' duplicada). Isso ocorre porque tentar apontar para a pasta do fornecedor via '../vendor/autoload' não funcionou para mim.
Portanto, exclua seu ID problemático do OAuth do cliente e tente esta abordagem, ele funcionará.
fonte