test - google oauth frontend



Richiedi a Google di restituire l'indirizzo email come parte di OAuth (5)

Sto usando OAuth per accedere a Gmail con dotNetOAuth. Come posso costringere Google a restituire l'indirizzo email dell'utente come parte della richiamata dopo l'autorizzazione?

Per impostazione predefinita, la funzione di richiamata di Google OAuth restituisce solo il token secret e i token di accesso.

https://src-bin.com


Answer #1

Ecco la funzione ac # per quando hai pre-autorizzato la richiesta come spiegato sopra:

        private void FetchUsersEmail(token)
        {
            var emailRequest = @"https://www.googleapis.com/userinfo/email?alt=json&access_token=" + token;
            // Create a request for the URL.        
            var request = WebRequest.Create(emailRequest);
            // Get the response.
            var response = (HttpWebResponse) request.GetResponse();
            // Get the stream containing content returned by the server.
            var dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            var reader = new StreamReader(dataStream);
            // Read the content. 
            var jsonString = reader.ReadToEnd();
            // Cleanup the streams and the response.
            reader.Close();
            dataStream.Close();
            response.Close();

            dynamic json = JValue.Parse(jsonString);
            var currentGoogleEmail = json.data.email;
        }

( JValue è parte di JSON.Net )


Answer #2

In php, la classe apiOauth2Service.php fornisce metodi per accedere alle informazioni utente registrate. Per questo è possibile utilizzare il metodo userinfo-> get (). Assicurati di utilizzare anche l'ambito https://www.googleapis.com/auth/userinfo.email .

Funzionerà con lo stesso token di accesso. Inoltre, dovresti provare a cercare altre API per un simile tipo di informazioni in cambio. È molto più facile guardare attraverso oAuth_playground >> http://code.google.com/apis/explorer/


Answer #3

OAuth non fornisce una funzionalità per parametri aggiuntivi durante un handshake OAuth, quindi non penso che tu possa forzare Google a fornirli. È probabile che vi sia un'API di Google, tuttavia puoi utilizzare il token di accesso OAuth per chiamare per recuperare l'indirizzo email dopo l'handshake.


Answer #4

Se richiedi l'ambito userinfo.email, Google restituisce un id_token insieme a access_token.

Id_token può essere non criptato per fornire l'indirizzo e-mail dell'utente, all'indirizzo www.googleapis.com?/oauth2/v1/tokeninfo?id_token=IDTOKENHERE

Ulteriori informazioni qui: https://developers.google.com/accounts/docs/OAuth2Login


Answer #5
For getting the Email Id, you need to add the scope "https://wwww.googleapis.com/auth/userinfo.email"

Then you will get id_token in the response.

Response={
   "access_token" : "ya29.eAG__HY8KahJZN9VmangoliaV-Jn7hLtestkeys",
   "token_type" : "Bearer",
   "expires_in" : 3600,
   "id_token" : "id_token_from_server",
   "refresh_token" : "1/GIHTAdMo6zLVKCqNbA"
 }

Then use this id_token as below POST request:

https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=id_token_from_server

And you will get response like below:

Response={
 "issuer": "accounts.google.com",
 "issued_to": "80780.apps.googleusercontent.com",
 "audience": "8078909.apps.googleusercontent.com",
 "user_id": "1118976557884",
 "expires_in": 3598,
 "issued_at": 1456353,
 "email": "[email protected]",
 "email_verified": true
}

Make sure you add "www" in the APIs as shown above...