¿Cómo puedo verificar un token de acceso de autenticación de Google?
Necesito consultar de alguna manera a Google y preguntar: ¿Es [dado el token de acceso] válido para la cuenta de Google [[email protected]]?
Versión corta :
está claro cómo un token de acceso suministrado a través de la autenticación de Google Api :: OAuth Authentication for Web Applications se puede utilizar para luego solicitar datos de una gama de servicios de Google. No está claro cómo verificar si un token de acceso determinado es válido para una cuenta de Google determinada. Me gustaría saber cómo.
Versión larga :
estoy desarrollando una API que usa autenticación basada en token. Se devolverá un token al proporcionar un nombre de usuario + contraseña válidos o al proporcionar un token de terceros de cualquiera de los N servicios verificables.
Uno de los servicios de terceros será Google, lo que permitirá a un usuario autenticarse contra mi servicio utilizando su cuenta de Google. Posteriormente, esto se ampliará para incluir cuentas de Yahoo, proveedores de OpenID de confianza, etc.
Ejemplo esquemático de acceso basado en Google:
texto alternativo http://webignition.net/images/figures/auth_figure002.png
La entidad 'API' está bajo mi control total. La entidad de 'interfaz pública' es cualquier aplicación web o de escritorio. Algunas interfaces públicas están bajo mi control, otras no lo estarán y otras aún no las conozco.
Por lo tanto, no puedo confiar en el token suministrado a la API en el paso 3. Esto se proporcionará junto con la dirección de correo electrónico de la cuenta de Google correspondiente.
Necesito consultar de alguna manera a Google y preguntar: ¿Es válido este token de acceso por [email protected] ?
En este caso, [email protected] es el identificador único de la cuenta de Google: la dirección de correo electrónico que alguien usa para iniciar sesión en su cuenta de Google. No se puede suponer que se trata de una dirección de Gmail: alguien puede tener una cuenta de Google sin tener una cuenta de Gmail.
La documentación de Google establece claramente cómo, con un token de acceso, los datos se pueden recuperar de varios servicios de Google. Nada parece indicar cómo puede verificar si un token de acceso dado es válido en primer lugar.
Actualización El token es válido para N servicios de Google. No puedo probar un token contra un servicio de Google como medio para verificarlo, ya que no sabré qué subconjunto de todos los servicios de Google utiliza un usuario determinado.
Además, nunca usaré el token de acceso de autenticación de Google para acceder a ningún servicio de Google, simplemente como un medio para verificar que un supuesto usuario de Google sea realmente quien dice ser. Si hay otra forma de hacerlo, estoy feliz de intentarlo.
Respuestas:
Para la verificación del usuario, simplemente publique obtener el token de acceso como accessToken y publíquelo y obtenga la respuesta
puede probar en la barra de direcciones en los navegadores también, use httppost y respuesta en java también
la respuesta será como
El alcance es el permiso otorgado por accessToken. puede consultar los identificadores de alcance en este enlace
Actualización: nueva publicación de API como se muestra a continuación
La respuesta será como
Para obtener más información, https://developers.google.com/identity/sign-in/android/backend-auth
fuente
puede verificar un token de acceso de autenticación de Google utilizando este punto final:
Este es el punto final de validación de Google V3 OAuth AccessToken, puede consultar el documento de Google a continuación: (En la
OAUTH 2.0 ENDPOINTS
pestaña)https://developers.google.com/identity/protocols/OAuth2UserAgent#validate-access-token
fuente
Ok, la mayoría de las respuestas son válidas pero no del todo correctas. La idea de JWT es que puede validar el token sin la necesidad de contactar al emisor cada vez. Debe verificar la identificación y verificar la firma del token con la clave pública conocida del certificado que Google utilizó para firmar el token.
Vea la próxima publicación por qué y cómo hacer esto.
http://ncona.com/2015/02/consuming-a-google-id-token-from-a-server/
fuente
The idea of JWT is that you can validate the token without the need to contact the issuer everytime.
fuente
Respuesta de flujo de código de Google oauth además de
access_token
devolucionesid_token
que contienen información útil para la validación en forma cifrada.El enlace https://developers.google.com/identity/protocols/OpenIDConnect#validatinganidtoken tiene ejemplos de código para la validación de tokens de ID.
Consulte también /security/37818/why-use-openid-connect-instead-of-plain-oauth .
fuente
No. Todo lo que necesita es solicitar un inicio de sesión estándar con Inicio de sesión federado para usuarios de la cuenta de Google desde su dominio API. Y solo después de eso, podría comparar la "identificación de usuario persistente" con una que tenga de 'interfaz pública'.
Por lo tanto, debe ser del mismo dominio que 'interfaz pública'.
Y no olvide que el usuario debe asegurarse de que su API sea confiable;) Google le preguntará al usuario si le permite verificar su identidad.
fuente
Aquí hay un ejemplo usando Guzzle :
fuente
Intente realizar una solicitud autenticada por OAuth usando su token a https://www.google.com/accounts/AuthSubTokenInfo . Esto solo está documentado para funcionar en AuthSub, pero también funciona para OAuth. No le dirá para qué usuario es el token, pero le dirá para qué servicios es válido, y la solicitud fallará si el token no es válido o ha sido revocado.
fuente
Un token de acceso OAuth arbitrario no se puede usar para la autenticación, porque el significado del token está fuera de la especificación OAuth Core. Podría estar destinado a un solo uso o una ventana de vencimiento estrecha, o podría proporcionar acceso que el usuario no quiere dar. También es opaco, y el consumidor de OAuth que lo obtuvo nunca podría haber visto ningún tipo de identificador de usuario.
Un proveedor de servicios de OAuth y uno o más consumidores podrían usar fácilmente OAuth para proporcionar un token de autenticación verificable, y hay propuestas e ideas para hacer esto, pero un proveedor de servicios arbitrario hablando solo OAuth Core no puede proporcionar esto sin otra ordenación con un consumidor. El método REST AuthSubTokenInfo específico de Google, junto con el identificador del usuario, está cerca, pero tampoco es adecuado, ya que podría invalidar el token o el token podría expirar.
Si su ID de Google es un identificador de OpenId y su 'interfaz pública' es una aplicación web o puede abrir el navegador del usuario, entonces probablemente debería usar el OP de OpenID de Google.
OpenID consiste en enviar al usuario al OP y recuperar una afirmación firmada. La interacción es únicamente para el beneficio del RP. No hay un token de larga duración u otro identificador específico del usuario que pueda usarse para indicar que un RP ha autenticado con éxito a un usuario con un OP.
Una forma de verificar una autenticación previa contra un identificador OpenID es simplemente realizar la autenticación nuevamente, suponiendo que se esté utilizando el mismo agente de usuario. El OP debe poder devolver una afirmación positiva sin interacción del usuario (verificando una cookie o un certificado de cliente, por ejemplo). El OP es libre de requerir otra interacción del usuario, y probablemente lo hará si la solicitud de autenticación proviene de otro dominio (mi OP me da la opción de volver a autenticar este RP en particular sin interactuar en el futuro). Y en el caso de Google, la interfaz de usuario que el usuario pasó para obtener el token OAuth podría no usar el mismo identificador de sesión, por lo que el usuario tendrá que volver a autenticarse. Pero en cualquier caso, podrás afirmar la identidad.
fuente