2016-07-08 99 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