2016-07-08 101 views
0

我試圖編寫UWP應用程序在C++(Visual Studio)OAuth進入Google Drive API。 我把這個項目的筆記從Github下載了 - https://github.com/googlesamples/oauth-apps-for-windows/blob/master/OAuthUniversalApp/README.mdUWP OAuth谷歌C + +

我能夠從Google獲得授權碼。但是,當我使用的授權碼來請求授權令牌則拋出我一個錯誤404

我的授權令牌請求URI是這樣的 -

https://googleapis.com/oauth2/v4/token?code=XXXXXXX#&client_id=ZZZZZZ&client_secret=YYYYYY&redirect_uri=uwapp.testgoogleoauth:/oauth2redirect&grant_type=authorization_code

由提到的筆記去鏈接,我使用iOS應用程序類型創建了客戶端ID。但是我沒有在那一步獲得客戶密鑰。我必須爲iOS應用程序類型再次顯式生成客戶機密鑰。

請問您在請求URI中看到的任何問題是否針對授權令牌請求發送?如果在谷歌控制檯中選擇iOS的客戶端類型,應該使用client_secret的值是什麼?

謝謝, /維卡斯

回答

0

有你在URI正在爲授權令牌請求發送請求看到任何問題?

在您請求的URI中,您使用的是https://googleapis.com/oauth2/v4/token。然而,爲了使令牌請求,正確的令牌端點應該是:

https://www.googleapis.com/oauth2/v4/token

這就是爲什麼你404 (Not Found)錯誤的原因。

如果在谷歌控制檯中選擇客戶端類型作爲iOS,那麼client_secret的值應該是什麼?

Handling the response and exchanging the code,我們可以發現,

client_secret您從API控制檯(不適用於註冊的Android,iOS或Chrome瀏覽器的應用程序客戶端)獲得客戶端機密。

因此對於iOS客戶端,不需要使用client_secret。由於UWP與iOS類似,我們也可以忽略UWP中的這個字段。

完整的授權令牌請求可能如下所示:

POST /oauth2/v4/token HTTP/1.1 
Host: www.googleapis.com 
Content-Type: application/x-www-form-urlencoded 

code=XXXXXX& 
client_id=ZZZZZZ& 
redirect_uri=uwapp.testgoogleoauth:/oauth2redirect& 
grant_type=authorization_code 
+0

我想我有改動的項目由您的建議。現在我的身份驗證令牌獲取網址如下所示 - https://www.googleapis.com/oauth2/v4/token?code=4/z6KaGnF5kNvW7SwwuIcnIz8RBMh8PDUPLEXvd70Xn28#&client_id=540870778118-7ndj7unhfqhbdtgpfj35ensavmdmnor3.apps.googleusercontent.com&redirect_uri=uwapp.testgoogleoauth:/oauth2redirect&grant_type = authorization_code但是我仍然得到相同的錯誤,即404。 – Vikas

+0

@Vikas這個請求是一個post請求,你可以用[HttpClient.PostAsync方法]設置這個請求(https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.web.http .httpclient.postasync.aspx)。當我使用[Request Maker](http://requestmaker.com/)測試你的請求時,我得到了'400 Bad Request'和'「error_description」:「代碼已經被兌換了。」。我認爲這是正確的迴應,因爲您的授權碼已被使用。 –

+0

非常感謝Jay。正如你所解釋的,我已經做了更改並解決了問題。我可以通過授權令牌獲得呼叫的回覆。 – Vikas