none
¿Como se valida el token de google? RRS feed

  • Pregunta

  • Hola chic@s aqui estoy nuevamente necesitando de sus conocimientos. Necesito validar un token id de google con oauth2 desde una web api. El token lo envía una aplicacion y yodebo validarlo desde la web api ¿me pueden ayudar? Gracias!!!


    lunes, 6 de julio de 2020 13:11

Todas las respuestas

  • Hola Julieta.Daniela,

    Hay un par de formas distintas en las que podrías validar la integridad del token:


    * Manualmente: descargando constantemente las claves públicas de Google, verificando la firma y luego todos y cada uno de los campos, incluido el iss; La principal ventaja de esta opción es que se puede minimizar la cantidad de solicitudes enviadas a Google.

    * Usando una biblioteca de cliente API de Google. De acuerdo con este issue en github, ahora se puede usar el método GoogleJsonWebSignature.ValidateAsync para validar un JWT firmado por Google. Simplemente debes pasarle la cadena idToken al método.  Si no es un token válido, devolverá NULL. Ten en cuenta que para usar este método, debes instalar Google.Apis.Auth.


    var validPayload = await GoogleJsonWebSignature.ValidateAsync(idToken);
    Assert.IsNotNull(validPayload);


    * Automáticamente: realiza un GET en el endpoint de Google para verificar el token.


    private const string GoogleApiTokenInfoUrl = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}";
    
    public ProviderUserDetails GetUserDetails(string providerToken)
    {
        var httpClient = new MonitoredHttpClient();
        var requestUri = new Uri(string.Format(GoogleApiTokenInfoUrl, providerToken));
    
        HttpResponseMessage httpResponseMessage;
        try
        {
            httpResponseMessage = httpClient.GetAsync(requestUri).Result;
        }
        catch (Exception ex)
        {
            return null;
        }
    
        if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
        {
            return null;
        }
    
        var response = httpResponseMessage.Content.ReadAsStringAsync().Result;
        var googleApiTokenInfo = JsonConvert.DeserializeObject<GoogleApiTokenInfo>(response);
    
        if (!SupportedClientsIds.Contains(googleApiTokenInfo.aud))
        {
            Log.WarnFormat("Google API Token Info aud field ({0}) not containing the required client id", googleApiTokenInfo.aud);
            return null;
        }
    
        return new ProviderUserDetails
        {
            Email = googleApiTokenInfo.email,
            FirstName = googleApiTokenInfo.given_name,
            LastName = googleApiTokenInfo.family_name,
            Locale = googleApiTokenInfo.locale,
            Name = googleApiTokenInfo.name,
            ProviderUserId = googleApiTokenInfo.sub
        };
    }


    Gracias por levantar tu consulta en los foros de msdn.


    Saludos cordiales

     

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 6 de julio de 2020 15:06
    Moderador
  • Hola Gabriel gracias por responder. Te realizo otra consulta es necesario valiar la aplicacion con el clientId y el clientsecret que se obtiene registardo la app en google?

    Saludos

    lunes, 6 de julio de 2020 17:49
  • hola

    Si tenes la webapi integrada con OAuth la validacion deberia ser automatica cuando se realiza el request y se tiene el [Autorize] como atributo del action

    AspNetCore WebAPI - Google Authentication

    lo encontre para una webapi en asp.net core, pero basicamente creo que el concepto se entiende

    cuando se invoca un action marcado como [Autorize] necesitara que primero pase por la autorizacion de google para que envie el token

    la api key que google proporciona la usas en la configuracion de oauth

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 6 de julio de 2020 18:24
  • Hola Julieta.Daniela,

    Primero que nada, definamos estos conceptos:

    Client ID: se utiliza para identificar la aplicación. Supongamos que estás creando una aplicación que necesita acceder a la API de Google Maps. En ese caso, debes registrar la aplicación con Google y Google te proporcionará la identificación de cliente, que es una identificación para identificar al cliente en nuestro caso, tu aplicación. La identificación de cliente está disponible públicamente. Por ejemplo, si usas “3 legged oAuth” como inicio de sesión con Google, puedes ver la identificación del cliente en la URL. Por lo tanto, no puedes utilizar la identificación del cliente como secreto.

    Client Secret: esta es la clave secreta verdadera, que se almacena de forma segura en el servidor y no está disponible para el público.

    Recuerda, el Client ID y Client Secret son comunes para muchos otros tipos de subvenciones, aparte de "Resource owner credentials grant". Aunque el Client ID no esté expuesto en ningún lugar al público, igual se considera una clave pública en el contexto general de OAuth. Según el estándar de oAuth, necesitas tanto el Client ID como el Client Secret junto con las credenciales del usuario para generar un token de acceso. Es el estándar definido por OAuth. Para responder a tu pregunta, debes enviarlos a ambos al servidor y almacenarlos, en este punto deberías revisar que todo esté en orden porque los vas a estar usando. 

    Saludos cordiales

     

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    lunes, 6 de julio de 2020 21:42
    Moderador
  • Hola Julieta.Daniela

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero tu respuesta.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Gabriel Castro
    jueves, 9 de julio de 2020 19:37
    Moderador