2017-09-02 70 views
1

我需要形成一個POST來發布Google PubSub消息。我無法使用客戶端庫,因爲它們使用與Google App Engine不兼容的gRPC。我可以形成關鍵的POST請求,但我不確定如何使用OAuth2對其進行身份驗證。使用OAuth2驗證Google PubSub POST請求

此鏈接顯示我在做什麼,但它掩蓋了驗證部分。 https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/publish

(如果GAE標準環境將支持GRPC這也沒有什麼關係。)

JSONObject obj = new JSONObject(); 
JSONArray attr = new JSONArray(); 
obj.put("script_name","foo_script.py"); 
obj.put("script_args","arg1"); 
attr.put(obj); 
JSONObject jsontop = new JSONObject(); 
jsontop.put("messages",attr); 
URL url = new URL("https://pubsub.googleapis.com/v1/projects/{my-URL}/topics/topic_run_script:publish"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

此代碼回來 「401:UNAUTHENTICATED」。我如何驗證它?

回答

1

App Engine具有一個API來獲取訪問令牌,您可以在調用Google服務時使用該令牌。有關文檔和示例,請參閱https://cloud.google.com/appengine/docs/standard/java/appidentity/#asserting_identity_to_google_apis

如果切換到Java 8環境,您也可以在GAE Std上使用pubsub客戶端庫。 This doc意味着它應該工作。

+0

感謝@David的有用鏈接。我缺少的行是:最終的AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService(); final AppIdentityService.GetAccessTokenResult accessToken = appIdentity.getAccessToken(scopes); conn.addRequestProperty(「Content-Type」,「application/json」); conn.addRequestProperty(「Authorization」,「Bearer」+ accessToken.getAccessToken()); – pldenc44