2008-09-17 8 views
6

He estado estudiando la API de autenticación de Google (AuthSub) ... Mi pregunta es, ¿cómo obtengo la información de la cuenta del usuario (al menos su dirección de Gmail) después del la autenticación ha pasado?Autenticación de Google API: Cómo obtener la dirección de gmail del usuario

Porque actualmente, todo lo que obtengo del proceso de autenticación es una ficha que me permite acceder a cualquier servicio de Google que haya especificado en el alcance, pero no hay forma fácil de obtener el ID de inicio de sesión del usuario (dirección de Gmail) Hasta donde puedo decir ...


Si es así, ¿qué servicio de Google me permite acceder a la información del usuario?

+0

¡También quiero saber eso! Aargh :-) –

+0

excelente tutorial y script para obtener la autenticación del usuario de gmail y acceder a los datos básicos http://www.9lessons.info/2011/07/login-with-google-account.html –

Respuesta

2

Con los servicios de Google AppEngine GData, puede solicitar al usuario que le dé acceso a su Google Mail, Calendario, Picasa, etc. Verifique here.

+1

Página no encontrada: P @Joe Skora –

4

Google Authentication API es un sistema basado en tokens para autenticar a un usuario válido. No expone ninguna otra interfaz que permita devolver la información del titular de la cuenta al autorizador.

2

Puede obtener algunos de los datos a través del OpenID API, con la extensión ax. Si se está autenticando con otros métodos, lo mejor que encuentro es llamando al https://www-opensocial.googleusercontent.com/api/people/@me/@self y obtendrá su nombre, correo electrónico e imagen. Asegúrese de tener http://www-opensocial.googleusercontent.com/api en los ámbitos al autenticar.

+0

De esta manera no devuelve el correo electrónico – Burjua

0
[ValidateInput(false)] 
    public ActionResult Authenticate(string returnUrl) 
    { 
     try 
     { 
      logger.Info("" + returnUrl + "] LoginController : Authenticate method start "); 
      var response = openid.GetResponse(); 
      if (response == null) 
      { 
       try 
       { 
        string discoveryuri = "https://www.google.com/accounts/o8/id"; 
        //OpenIdRelyingParty openid = new OpenIdRelyingParty(); 
        var fetch = new FetchRequest();// new 
        var b = new UriBuilder(Request.Url) { Query = "" }; 
        var req = openid.CreateRequest(discoveryuri, b.Uri, b.Uri); 
        fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
        fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName); 
        req.AddExtension(fetch); 
        return req.RedirectingResponse.AsActionResult(); 
       } 
       catch (ProtocolException ex) 
       { 
        logger.ErrorFormat(" LoginController : Authenticate method has error, Exception:" + ex.ToString()); 
        ViewData["Message"] = ex.Message; 
        return View("Login"); 
       } 
      } 
      else 
      { 
       logger.Info("" + returnUrl + "] LoginController : Authenticate method :when responce not null "); 
       switch (response.Status) 
       { 
        case AuthenticationStatus.Authenticated: 
         logger.Info("" + response.Status + "] LoginController : Authenticate method : responce status "); 
         var fetchResponse = response.GetExtension<FetchResponse>(); 
         string email = fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email); 
         string userIPAddress = HttpContext.Request.UserHostAddress; 
         SecurityManager manager = new SecurityManager();        
         int userID = manager.IsValidUser(email); 

         if (userID != 0) 
         { 
          ViewBag.IsFailed = "False"; 
          logger.Info("" + userID + "] LoginController : Authenticate method : user id id not null "); 
          Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay; 
          Session["UserEmail"] = email; 

          FormsAuthentication.SetAuthCookie(email, false); 

          WebSession.UserEmail = email; 
          WebSession.UserID = userID; 

          UserManager userManager = new UserManager(); 
          WebSession.AssignedSites = userManager.GetAssignedSites(userID); 



          if (!string.IsNullOrEmpty(returnUrl)) 
          { 
           logger.Info("" + returnUrl + "] LoginController : Authenticate method : retutn url not null then return Redirect "); 
           return Redirect(returnUrl); 
          } 
          else 
          { 
           logger.Info("" + returnUrl + "] LoginController : Authenticate method : retutn url null then return RedirectToAction "); 
           // 
           return Redirect("/Home"); 
          } 
         } 
         else 
         { 
          ViewBag.IsFailed = "True"; 
          logger.Info("" + returnUrl + "] LoginController : Authenticate method :user id null "); 
          if (!string.IsNullOrEmpty(returnUrl)) 
          { 
           logger.Info("" + returnUrl + "] LoginController : Authenticate method :and return Redirect "); 
           return Redirect(returnUrl); 
          } 
          else 
          { 
           logger.Info("" + returnUrl + "] LoginController : Authenticate method :and return RedirectToAction "); 

           return View("Index"); 

          } 
         } 

        case AuthenticationStatus.Canceled: 
         logger.Info("" + response.Status + "] LoginController : Authenticate method : AuthenticationStatus.Canceled and return view "); 
         ViewData["Message"] = "Canceled at provider"; 
         return View("Login"); 
        case AuthenticationStatus.Failed: 
         logger.Info("" + response.Status + "] LoginController : Authenticate method : AuthenticationStatus.Failed and return view "); 
         logger.Error(response.Exception.Message); 
         ViewData["Message"] = response.Exception.Message; 
         return View("Login"); 
       } 

      } 
      logger.Info("" + returnUrl + "] LoginController : Authenticate method end and return EmptyResult"); 
      return new EmptyResult(); 
     } 
     catch (Exception ex) 
     { 
      logger.Error(" LoginController : Authenticate method ", ex); 
      throw; 
     } 
    } 
Cuestiones relacionadas