Требовать от Google возврата адреса электронной почты как части OAuth

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

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


person Khash    schedule 27.06.2010    source источник
comment
Вы узнали, какой вызов API можно использовать для получения адреса электронной почты пользователя?   -  person Christian Davén    schedule 08.09.2010
comment
Нет. Более того, из-за разных реализаций OAuth у разных провайдеров мы решили отказаться от этого требования и внедрить обходной путь для бизнеса. Это просто напоминает мне цитату Лучшее в стандартах то, что их много   -  person Khash    schedule 10.11.2010


Ответы (7)


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

person Andrew Arnott    schedule 06.07.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<. /а>

person mergoc    schedule 24.11.2010
comment
Это не работало для меня. Если это не для вас, вы также можете подключиться к контактам Google в (в дополнение к подключению к Gmail), чтобы получить свой адрес электронной почты. См.: заголовок stackoverflow.com/questions/6970794/ - person Joe; 09.08.2011
comment
Добавление области userinfo.email к моему запросу outh отлично сработало для меня. После этого я смог получить электронную почту из ответа oauth. - person ftassi; 15.08.2013

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

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

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

            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);
person Paulius Zaliaduonis    schedule 13.10.2011
comment
Также просмотрите sites.google.com/site/oauthgoog/Home/emaildisplayscope. и проверьте свои токены на googlecodesamples.com/oauth_playground. - person Paulius Zaliaduonis; 13.10.2011

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

        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)

person jenson-button-event    schedule 03.12.2012
comment
не работает... Удаленный сервер вернул ошибку: (403) Запрещено. - person Jitendra Pancholi; 18.09.2014
comment
Этот URL ("https://www.googleapis.com/userinfo/email?alt=json&access_token=" + token) был именно тем, что мне было нужно. Спасибо! - person Aron; 02.08.2016

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

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

person Manish    schedule 24.02.2012

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

id_token можно не зашифровывать, чтобы указать адрес электронной почты пользователя, на странице www.googleapis.com?/oauth2/v1/tokeninfo?id_token=IDTOKENЗДЕСЬ.

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

person Lee    schedule 04.09.2013

person    schedule
comment
Привет, Нарен. Я не получаю письмо в ответ. Странно то, что у меня есть другое приложение, которое использует OAuth, и это приложение работает отлично, и в ответе есть электронная почта. - person Sidharth Samant; 06.12.2016
comment
Это должен быть access_token, а не id_token - person unruledboy; 20.01.2020