2014-02-26 110 views
0

我正在嘗試在appengine中獲取用戶的電子郵件。 我無法在web.xml文件中使用UserService。如何使用oauth2服務帳戶獲取登錄用戶的電子郵件?

我正在使用OAuth2和「服務帳戶」,這樣如果域管理員給它高,用戶應該是透明的。

這是我正在使用的代碼,但我無法找到任何解決方案。 因爲當我用「Google Plus服務」請求用戶電子郵件時,請返回oauth2 clientID。

GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
     .setJsonFactory(JSON_FACTORY) 
     .setServiceAccountId("[email protected]") 
     .setServiceAccountScopes(Arrays.asList(
      "https://www.googleapis.com/auth/plus.me", 
       "https://www.googleapis.com/auth/userinfo.email", 
       "https://www.googleapis.com/auth/userinfo.profile")) 
     .setServiceAccountPrivateKeyFromP12File(
       new java.io.File(
         "WEB-INF/yyyyyyyyyyyyyyyyyy-privatekey.p12")) 
     .build(); 

     Plus plus = new Plus(HTTP_TRANSPORT, JSON_FACTORY, credential); 

     Person profile = plus.people().get("me").execute(); 

     String email=profile.getEmails().get(0); 

     String state = new BigInteger(130, new SecureRandom()).toString(32); 


     String send="https://accounts.google.com/o/oauth2/auth?"+ 
             "scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&"+ 
             "state=url%3Dhttps%253A%252F%rrrrrrrrrrrrrrr.appspot.com%26security_token%3D"+state+"&"+ 
             "redirect_uri=https://rrrrrrrrrrrrrrrr.appspot.com/vuelta&"+ 
             "response_type=id_token&"+ 
             "login_hint="+email+"&"+ 
             "client_id=Client_ID_for_web_application.apps.googleusercontent.com"; 
     resp.sendRedirect(send); 

我該如何繼續?

在此先感謝。

+0

在回調方法中,你的回答不是那些部分嗎? – kosa

+0

i當我從googlePlus服務獲取用戶時,總是返回我在'setServiceAccountId。(「[email protected]」)中設置的值' 即:'Client_ID_Service_Account @ developer.gserviceaccount.com' – user2606850

回答

0

您代表服務帳戶發出請求,因此plus.me請求會返回有關服務帳戶的信息。爲了代表用戶提出請求,您需要一些東西(電子郵件)來標識您感興趣的用戶。如果沒有這些,Google就無法知道您感興趣的用戶。所以,您要問的是除非你已經有了電子郵件,否則不可能在服務器端。

你想要做的是發起一個標準(而不是服務帳戶)oauth 2認證,詢問用戶的plus.me範圍。由於服務帳戶已具有權限,因此您將自動獲得這些權限。然後您可以使用該授權來請求有關用戶的信息。

+0

是的,這是問題所在,我不知道如何在沒有(在web.xml中)或使用UserService(對於java)的情況下獲取用戶電子郵件,因爲在此方法中,應用程序顯示一個屏幕就像openID一樣,這對於Google APPs Marketplace的requeriments無效... – user2606850

相關問題