Como posso verificar um token de acesso à autenticação do Google?
De alguma forma, preciso consultar o Google e perguntar: [o token de acesso fornecido] é válido para a conta do Google [[email protected]]?
Versão curta :
está claro como um token de acesso fornecido pelo Google Authentication Api :: OAuth Authentication for Web Applications pode ser usado para solicitar dados de vários serviços do Google. Não está claro como verificar se um determinado token de acesso é válido para uma determinada conta do Google. Eu gostaria de saber como.
Versão longa :
estou desenvolvendo uma API que usa autenticação baseada em token. Um token será retornado mediante o fornecimento de um nome de usuário + senha válidos ou mediante o fornecimento de um token de terceiros de qualquer um dos N serviços verificáveis.
Um dos serviços de terceiros será o Google, permitindo que um usuário se autentique no meu serviço usando sua Conta do Google. Mais tarde, isso será estendido para incluir contas do Yahoo, provedores confiáveis de OpenID e assim por diante.
Exemplo esquemático de acesso baseado no Google:
texto alternativo http://webignition.net/images/figures/auth_figure002.png
A entidade 'API' está sob meu controle total. A entidade 'interface pública' é qualquer aplicativo baseado na Web ou na área de trabalho. Algumas interfaces públicas estão sob meu controle, outras não e outras ainda que eu talvez nunca saiba.
Portanto, não posso confiar no token fornecido à API na etapa 3. Ele será fornecido junto com o endereço de e-mail da conta do Google correspondente.
De alguma forma, preciso consultar o Google e perguntar: esse token de acesso é válido por [email protected] ?
Nesse caso, [email protected] é o identificador exclusivo da conta do Google - o endereço de e-mail que alguém usa para fazer login na conta do Google. Não se pode supor que seja um endereço do Gmail - alguém pode ter uma conta do Google sem ter uma conta do Gmail.
A documentação do Google indica claramente como, com um token de acesso, os dados podem ser recuperados de vários serviços do Google. Nada parece indicar como você pode verificar se um determinado token de acesso é válido em primeiro lugar.
Atualizar O token é válido para N serviços do Google. Não posso tentar um token em um serviço do Google como forma de verificá-lo, pois não saberei qual subconjunto de todos os serviços do Google um determinado usuário realmente usa.
Além disso, nunca usarei o token de acesso de autenticação do Google para acessar quaisquer serviços do Google, apenas como meio de verificar se um suposto usuário do Google é realmente quem eles dizem que são. Se houver outra maneira de fazer isso, estou feliz em tentar.
Respostas:
Para verificação do usuário, basta postar obter o token de acesso como accessToken e publicá-lo e obter a resposta
você também pode tentar na barra de endereços dos navegadores, usar httppost e response em java também
resposta será como
O escopo é a permissão fornecida do accessToken. você pode verificar os IDs de escopo neste link
Atualização: nova publicação da API, conforme abaixo
A resposta será tão
Para mais informações, https://developers.google.com/identity/sign-in/android/backend-auth
fonte
você pode verificar um token de acesso à autenticação do Google usando este terminal:
Este é o ponto de extremidade de validação do Google V3 OAuth AccessToken, você pode consultar no documento do Google abaixo: (Na
OAUTH 2.0 ENDPOINTS
guia)https://developers.google.com/identity/protocols/OAuth2UserAgent#validate-access-token
fonte
Ok, a maioria das respostas é válida, mas não totalmente correta. A ideia do JWT é que você possa validar o token sem a necessidade de entrar em contato com o emissor sempre. Você deve verificar o ID e verificar a assinatura do token com a chave pública conhecida do certificado que o Google usou para assinar o token.
Veja o próximo post por que e como fazer isso.
http://ncona.com/2015/02/consuming-a-google-id-token-from-a-server/
fonte
The idea of JWT is that you can validate the token without the need to contact the issuer everytime.
fonte
A resposta do fluxo de código oauth do Google, além de
access_token
retornosid_token
que também contêm informações úteis para validação, na forma criptografada.O link https://developers.google.com/identity/protocols/OpenIDConnect#validatinganidtoken possui exemplos de código para validação de tokens de ID.
Consulte também /security/37818/why-use-openid-connect-instead-of-plain-oauth .
fonte
Não. Tudo o que você precisa é solicitar o login padrão com o Login federado para usuários da conta do Google no seu domínio da API. E somente depois disso você poderá comparar o "ID do usuário persistente" com o que você possui na 'interface pública'.
Então você precisa ser do mesmo domínio que 'interface pública'.
E não esqueça que o usuário precisa ter certeza de que sua API pode ser confiável;) Portanto, o Google perguntará ao usuário se isso permite que você verifique sua identidade.
fonte
Aqui está um exemplo usando o Guzzle :
fonte
Tente fazer uma solicitação autenticada pelo OAuth usando seu token para https://www.google.com/accounts/AuthSubTokenInfo . Isso está documentado apenas para funcionar no AuthSub, mas também no OAuth. Ele não informará para qual usuário o token é, mas informará para quais serviços ele é válido e a solicitação falhará se o token for inválido ou tiver sido revogado.
fonte
Um token de acesso arbitrário do OAuth não pode ser usado para autenticação, porque o significado do token está fora da especificação principal do OAuth. Poderia ser destinado a um único uso ou a uma janela de expiração restrita, ou poderia fornecer acesso que o usuário não deseja fornecer. Também é opaco, e o consumidor OAuth que o obteve talvez nunca tenha visto nenhum tipo de identificador de usuário.
Um provedor de serviços OAuth e um ou mais consumidores podem facilmente usar o OAuth para fornecer um token de autenticação verificável, e existem propostas e idéias para fazer isso por aí, mas um provedor de serviços arbitrário que fala apenas o OAuth Core não pode fornecer isso sem outra colaboração. coordenação com um consumidor. O método AuthSubTokenInfo REST específico do Google, junto com o identificador do usuário, está próximo, mas também não é adequado, pois pode invalidar o token ou o token pode expirar.
Se o seu ID do Google for um identificador OpenId e sua "interface pública" for um aplicativo da Web ou puder acessar o navegador do usuário, você provavelmente deverá usar o OpenID OP do Google.
O OpenID consiste apenas em enviar o usuário ao OP e obter uma asserção assinada de volta. A interação é exclusivamente para o benefício do PR. Não há token de longa duração ou outro identificador específico do usuário que possa ser usado para indicar que um RP autenticou com êxito um usuário com um OP.
Uma maneira de verificar uma autenticação anterior em relação a um identificador OpenID é apenas executar a autenticação novamente, assumindo que o mesmo user agent esteja sendo usado. O OP deve poder retornar uma afirmação positiva sem a interação do usuário (verificando um cookie ou certificado de cliente, por exemplo). O OP está livre para exigir outra interação do usuário, e provavelmente o fará se a solicitação de autenticação vier de outro domínio (meu OP me dá a opção de autenticar novamente esse RP específico sem interagir no futuro). E, no caso do Google, a interface do usuário que o usuário utilizou para obter o token OAuth pode não usar o mesmo identificador de sessão; portanto, o usuário precisará se autenticar novamente. Mas, em qualquer caso, você poderá afirmar a identidade.
fonte