【问题标题】:UWP OAuth google c++UWP OAuth 谷歌 C++
【发布时间】:2016-11-10 11:03:37
【问题描述】:

我试图用 C++ (Visual Studio) 编写一个用于 OAuth 的 UWP 应用程序到 Google Drive API。 我在 Github 下引用了这个项目的笔记—— https://github.com/googlesamples/oauth-apps-for-windows/blob/master/OAuthUniversalApp/README.md

我能够从 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 中是否看到任何问题?如果在 google 控制台中选择了客户端类型为 iOS,client_secret 的值应该是多少?

谢谢, /维卡斯

【问题讨论】:

    标签: c++ oauth-2.0 uwp


    【解决方案1】:

    您在为授权令牌请求发送的请求 URI 中是否看到任何问题?

    在您请求的 URI 中,您使用的是 https://googleapis.com/oauth2/v4/token。但是,要发出令牌请求,正确的令牌端点应该是:

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

    这就是您收到404 (Not Found) 错误的原因。

    如果客户端类型在google console中选择了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
    

    【讨论】:

    • 我按照您的建议尝试了我的项目并进行了更改。现在我的身份验证令牌获取 URL 看起来像 - googleapis.com/oauth2/v4/token?code=4/… 但我仍然收到相同的错误,即 404。
    • @Vikas 这个请求是一个post请求,你可以用HttpClient.PostAsync method设置这个请求。当我使用Request Maker 测试您的请求时,我得到了400 Bad Request"error_description": "Code was already redeemed."。我认为这是一个正确的回应,因为您的授权码已被使用。
    • 非常感谢杰。正如您所解释的,我已经完成了更改并且问题已解决。我能够从调用中获得响应以及授权令牌。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多