2

解決方案

我想出瞭如何解決此問題。使用服務帳戶使用customerLicense應用程序市場時出錯OAuth2

的一切都在這裏首先是我的執行與服務帳戶:

// Build service account credential. 
    GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport) 
     .setJsonFactory(JSON_FACTORY) 
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
     .setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/appsmarketplace.license")) 
     .setServiceAccountPrivateKeyFromP12File(new File("/path/to/mykey/key.p12")) 
//   .setServiceAccountUser("NOT SET THIS LINE") 
     .build(); 

     License build = new License.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName("My Application").build(); 
    Licenses execute = build.customerLicense().get("9999999999", "domain.test.com").execute(); 

本許可證的Builder對象是自己基於全新谷歌的API客戶端1.17及以上的實施。如果有人能夠指導我,我如何與社區其他人分享,我會很樂意去做。

最佳,


我已經發布了另一個線程,Google Apps Marketplace API customerLicense with OAuth2,解釋我的意圖與消費的OAuth2服務帳戶策略,這個API。

我都想盡方法和官員圖書館目前,我總是得到無效的OAuth頭消息或非授權

我要詳細說一下的是風景,什麼事情我都試過:

  1. 我有和Google App Marketplace使用服務帳戶OAuth2,因爲所有任務都在後臺執行。
  2. 此API項目也有服務帳戶密鑰和客戶端Web帳戶密鑰。
  3. 我發佈的應用程序僅限於我的域名,因爲我尚未開發。所以我爲我的域安裝了應用程序。
  4. 在這一點上,假設我是通過API項目ID和客戶ID(它是域名)來查詢客戶許可證的,我必須查看我的域的APP許可證。
  5. 我已使用此罐子https://developers.google.com/google-apps/marketplace/v2/developers_guide訪問許可API。
  6. 這是我的代碼:

    String appName = "MY APP"; AppsMarketService service = new AppsMarketService(); service.appId = "NUMBER_APP_ID"; service.appName = appName; service.endpoint = "https://www.googleapis.com/appsmarket/v2/"; service.consumerKey = service.appId + ".apps.googleusercontent.com"; service.consumerSecret = "CLIENT_SECRET_FROM_WEB_OAUTH2_API_PROJECT"; service.authorize();

  7. 我得到403禁止如果我使用此代碼。

  8. 如果我從我的API項目web OAuth2更改了前綴clientId的appId,我得到了200但是body UNLICENSED。
  9. 我已將範圍添加到我的應用程序https://www.googleapis.com/auth/appsmarketplace.license,而且我仍得到相同的結果。
  10. 我曾嘗試也從服務帳戶握手管理員用戶獲得訪問令牌,然後用它的OAuth2訪問令牌訪問API許可和相同的結果無效的OAuth令牌

我的問題是:

  1. 有沒有什麼方法可以使用服務帳戶密鑰訪問此API,考慮到服務帳戶密鑰中沒有消費者密鑰,只有客戶端ID和私鑰文件?
  2. 是否有任何更新的庫與OAuth2一起使用,因爲我看到所有這些庫都使用OAuth1進行兩腳認證?

這將是巨大的,如果有人能幫助我,因爲我們正試圖給我們7個谷歌應用程序舊市場應用從您好!OAuth1遷移到OAuth2按谷歌要求,但我們已經在執行一些黑洞,如果我們也不會能夠查詢哪些域有我們的應用程序安裝。

最好,

+0

我終於設法只使用服務帳號密鑰來使用授權API。 Java API中存在一些棘手的問題,我只能使用Python庫進行研究。對不起,Java的人,但在其他語言的一些實現更好,更完整。我使用新的google-api-client-1.17.0製作了許可證API的實施,我想與其他人分享。我可以在哪上傳? – jproyo

回答

0

除了OAuth2庫之外,沒有其他庫需要。你可以使用urlfetch來實現這一點。

... 
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.http.javanet.NetHttpTransport; 
import com.google.api.client.json.JsonFactory; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.appengine.api.urlfetch.FetchOptions.Builder; 
import com.google.appengine.api.urlfetch.HTTPHeader; 
import com.google.appengine.api.urlfetch.HTTPMethod; 
import com.google.appengine.api.urlfetch.HTTPRequest; 
import com.google.appengine.api.urlfetch.HTTPResponse; 
import com.google.appengine.api.urlfetch.URLFetchServiceFactory; 

... 

String SERVICE_ACCOUNT_EMAIL = "[email protected]"; 
String P12 = "...-privatekey.p12"; 
// appid is the same id that you have in the google cloud project that has the Google Apps Marketplace API and SDK enabled 
String appid = ""; 

GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(new NetHttpTransport()) 
    .setJsonFactory(new JacksonFactory()) 
    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
    .setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/appsmarketplace.license")) 
    .setServiceAccountPrivateKeyFromP12File(new File(P12)) 
    .build(); 

credential.refreshToken(); 
String token = credential.getAccessToken(); 

URL url = new URL("https://www.googleapis.com/appsmarket/v2/licenseNotification/"+appid); 

HTTPRequest request = new HTTPRequest(url, HTTPMethod.GET, Builder.allowTruncate()); 
request.setHeader(new HTTPHeader("Authorization", "Bearer "+token)); 

HTTPResponse response = URLFetchServiceFactory.getURLFetchService().fetch(request); 

您需要安裝OAuth2軟件包才能正常工作。在eclipse中,在Google>添加Google Apis下。

+1

我不是初級程序員。事實上,如果我們要嚴格,不需要URL提取,它可以用任何HTTP庫實現。當我指圖書館時,我正在談論的包裝響應對象表示,如谷歌API服務管理目錄或任何其他谷歌官方包裝。 – jproyo

相關問題