Требовать от Google вернуть адрес электронной почты как часть OAuth - PullRequest
28 голосов
/ 28 июня 2010

Я использую OAuth для доступа к Gmail через dotNetOAuth.Как заставить Google возвращать адрес электронной почты пользователя как часть обратного вызова после авторизации?

По умолчанию обратный вызов Google OAuth возвращает только секретный токен и токены доступа.

Ответы [ 7 ]

65 голосов
/ 24 ноября 2010

Сначала вам нужно добавить следующую область (https://www.googleapis.com/auth/userinfo.email) к вашему запросу oauth.

После того, как вы вернетесь к своему приложению из Google и получите свой токен доступа, вы можете сделать запрос с помощью токена доступа на https://www.googleapis.com/userinfo/email?alt=json. Это вернет адрес электронной почты. Больше информации на http://sites.google.com/site/oauthgoog/Home/emaildisplayscope

9 голосов
/ 06 июля 2010

OAuth не предоставляет средства для дополнительных параметров во время рукопожатия OAuth, поэтому я не думаю, что вы можете заставить Google предоставить его. Однако, вероятно, существует API Google, с помощью которого вы можете использовать свой токен доступа OAuth для вызова адреса электронной почты после рукопожатия.

6 голосов
/ 20 мая 2015
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": "emailId@gmail.com",
 "email_verified": true
}

Make sure you add "www" in the APIs as shown above...
2 голосов
/ 03 декабря 2012

Вот функция c #, когда вы предварительно авторизовали запрос, как описано выше:

        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 является частью JSON.Net )

2 голосов
/ 13 октября 2011

запросить область OAuth, чтобы включить «Область отображения электронной почты» https://www.googleapis.com/auth/userinfo.email

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

Затем используйте REST API, например Гамак , чтобы получить адрес

            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);
1 голос
/ 24 февраля 2012

В php класс apiOauth2Service.php предоставляет методы для доступа к зарегистрированной информации пользователя.Для этого вы можете использовать метод userinfo-> get ().Убедитесь, что вы также используете область действия https://www.googleapis.com/auth/userinfo.email.

. Это будет работать с тем же маркером доступа.Также вы должны попробовать поискать в других API аналогичную информацию в ответ.Это намного проще просматривать через oAuth_playground >> http://code.google.com/apis/explorer/

0 голосов
/ 04 сентября 2013

Если вы запрашиваете область userinfo.email, Google возвращает id_token вместе с access_token.

ID_token может быть незашифрован для предоставления адреса электронной почты пользователя по адресу www.googleapis.com?/oauth2/v1/ tokeninfo? id_token = IDTOKENHERE

Дополнительная информация здесь: https://developers.google.com/accounts/docs/OAuth2Login

...