Изискване от 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) към вашата заявка за oaut.

След като се върнете към приложението си от Google и имате своя маркер за достъп, можете да направите заявка с помощта на маркера за достъп до https://www.googleapis.com/userinfo/email?alt=json. Това ще върне имейл адреса. Повече информация на http://sites.google.com/site/oauthgoog/Home/emaildisplayscope

person mergoc    schedule 24.11.2010
comment
Тази връзка може да помогне на всеки, който има проблеми с подписването на заявки за API на Google (трябва да добавите заглавка за упълномощаване): code.google.com/apis/accounts/docs/OAuth_ref.html#SigningOAuth - person Pawel Lesnikowski; 15.06.2011
comment
Това не работеше за мен. Ако и за вас не е така, можете също да се свържете с Google Контакти в (в допълнение към свързването с Gmail), за да получите своя имейл адрес. Вижте: stackoverflow.com/questions/6970794/ - person Joe; 09.08.2011
comment
Добавянето на обхват на userinfo.email към моята outh заявка работи добре за мен. След това успях да извлека имейл от oauth response. - 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

Ето функция на 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)

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