web-dev-qa-db-fra.com

Obliger Google à renvoyer l'adresse e-mail dans le cadre d'OAuth

J'utilise OAuth pour accéder à Gmail avec dotNetOAuth. Comment puis-je forcer Google à renvoyer l'adresse e-mail de l'utilisateur dans le cadre du rappel après autorisation?

Par défaut, le rappel Google OAuth ne renvoie que le jeton secret et les jetons d'accès.

28
Khash

OAuth ne fournit pas de possibilité de paramètres supplémentaires lors d'une prise de contact OAuth. Je ne pense donc pas que vous puissiez forcer Google à le fournir. Il existe probablement une API Google, mais vous pouvez utiliser votre jeton d'accès OAuth pour récupérer l'adresse e-mail après la prise de contact.

9
Andrew Arnott

Vous devez d’abord ajouter l’étendue suivante ( https://www.googleapis.com/auth/userinfo.email ) à votre demande oauth. 

Une fois que vous êtes revenu dans votre application depuis Google et que vous avez votre jeton d'accès, vous pouvez faire une demande à l'aide du jeton d'accès à https://www.googleapis.com/userinfo/email?alt=json. Ceci renverra l'adresse e-mail. Plus d'infos sur http://sites.google.com/site/oauthgoog/Home/emaildisplayscope

65
mergoc
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...
6
Naren

demander à l'étendue OAuth d'inclure "l'étendue d'affichage de la messagerie" https://www.googleapis.com/auth/userinfo.email

scope="http://www.google.com/m8/feeds/ https://www.googleapis.com/auth/userinfo.email"

Puis utilisez REST API comme Hammock pour obtenir l'adresse

            RestClient client = new RestClient
            {
                Authority = "https://www.googleapis.com",
            };

            RestRequest request = new RestRequest
            {
                Path = "userinfo/email?alt=json",
                Credentials = OAuthCredentials.ForProtectedResource(
                     this.requestSettings.ConsumerKey,
                     this.requestSettings.ConsumerSecret,
                     this.requestSettings.Token,
                     this.requestSettings.TokenSecret)
            };

            var response = client.Request(request);
2

Voici une fonction c # lorsque vous avez préautorisé la demande comme indiqué ci-dessus:

        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 fait partie de JSON.Net )

2

En php, la classe apiOauth2Service.php fournit des méthodes pour accéder aux informations de l'utilisateur connecté. Pour cela, vous pouvez utiliser la méthode userinfo-> get (). Assurez-vous également d'utiliser scope https://www.googleapis.com/auth/userinfo.email

Cela fonctionnera avec le même jeton d'accès. En outre, vous devriez essayer de rechercher dans les autres API des informations similaires. C'est beaucoup plus facile de regarder à travers oAuth_playground >> http://code.google.com/apis/Explorer/

1
Manish

Si vous demandez l'étendue userinfo.email, Google renvoie un id_token avec le access_token.

Id_token peut être déchiffré pour fournir l'adresse électronique de l'utilisateur, à l'adresse www.googleapis.com?/oauth2/v1/tokeninfo?id_token=IDTOKENHERE.

Plus d'informations ici: https://developers.google.com/accounts/docs/OAuth2Login

0
Lee