web-dev-qa-db-ja.com

OAuthの一部としてメールアドレスを返すようにGoogleに要求する

OAuthを使用してdotNetOAuthでGmailにアクセスしています。承認後のコールバックの一部としてGoogleにユーザーのメールアドレスを返すように強制するにはどうすればよいですか?

デフォルトでは、Google OAuthコールバックは、トークンシークレットとアクセストークンのみを返します。

28
Khash

OAuthは、OAuthハンドシェイク中に追加のパラメーターを提供する機能を提供しないため、Googleに強制的に提供させることはできないと思います。GoogleAPIが存在する可能性がありますが、 OAuthハンドシェイク後に、メールアドレスを取得するために呼び出すアクセストークン。

9
Andrew Arnott

まず、次のスコープ( 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

65
mergoc

request OAuth "Email Display Scope"を含めるスコープ https://www.googleapis.com/auth/userinfo.email

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

次に、REST API like 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);
2

上記のようにリクエストを事前承認した場合の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;
        }

JValueJSON.Net の一部です)

2

Phpでは、apiOauth2Service.phpクラスは、ログインしたユーザー情報にアクセスするためのメソッドを提供します。これには、userinfo-> get()メソッドを使用できます。スコープも使用していることを確認してください https://www.googleapis.com/auth/userinfo.email

これは同じアクセストークンで機能します。また、他のAPIを調べて、同様の種類の情報を探してみてください。これは、oAuth_playgroundを調べるのがはるかに簡単です>> http://code.google.com/apis/Explorer/

1
Manish

Userinfo.emailスコープをリクエストすると、Googleはaccess_tokenとともにid_tokenを返します。

Id_tokenは、www.googleapis.com?/ oauth2/v1/tokeninfo?id_token = IDTOKENHEREで、暗号化を解除してユーザーのメールアドレスを提供できます。

詳細はこちら: https://developers.google.com/accounts/docs/OAuth2Login

0
Lee