【问题标题】:Exchanging Authorization Code for Access Token for Google Calendar API with VBA and Oauth2使用 VBA 和 Oauth2 为 Google Calendar API 交换访问令牌的授权码
【发布时间】:2014-10-17 15:09:53
【问题描述】:

成功获取授权代码后,我在尝试访问 Google 日历 API 时无法将其交换为访问令牌和刷新令牌。我收到错误 404 Not Found。这是我的代码:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/auth2/token"

Dim getTokenBody As String
getTokenBody = "code=" & code & _
        "&redirect_uri=urn:ietf:wg:oauth:2.0:oob" & _
        "&client_id=xxxxxxx-xxxxxxxx.apps.googleusercontent.com" & _
        "&client_secret={myLittleSecret}" & _
        "&grant_type=authorization_code"

Dim Http As MSXML2.XMLHTTP60                 
Set Http = CreateObject("MSXML2.XMLHTTP.6.0")  

With Http
    .Open "POST", getTokenUrl, False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .send(getTokenBody)
End With
Do While Http.ReadyState <> 4
Loop

Debug.Print Http.responseText

我也尝试过将所有内容都放在 .Open 方法的 url 参数中,而在 .Send 方法中什么都没有:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/oauth2/token&code=" & code & "&client_id=xxxxxx-xxxxxx.apps.googleusercontent.com&client_secret={myLittleSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code"

Dim Http As MSXML2.XMLHTTP60                 
Set Http = CreateObject("MSXML2.XMLHTTP.6.0")  

With Http
    .Open "POST", getTokenUrl, False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .send("")
End With

我尝试过使用 WinHttp.WinHttpRequest 而不是 MSXML2.XMLHTTP。

我尝试使用 http://localhost 代替 urn:ietf:wg:oauth:2.0:oob。

我已经尝试将http://localhost 和 urn:ietf:wg:oauth:2.0:oob url 编码。

全部给出错误 404 Not Found。

有人可以帮我指出正确的方向吗?

【问题讨论】:

  • 嘿 @autoKarma 能否请您发布您用于获取授权码的 VBA 代码?我在任何地方都找不到有关如何执行此操作的明确说明...谢谢!

标签: vba oauth-2.0 google-oauth


【解决方案1】:

终于明白了——

我使用的网址是错误的——一个字母类型-o /forehead-slap/

代替:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/auth2/token"

应该是:

Dim getTokenUrl As String
getTokenUrl = "https://accounts.google.com/o/oauth2/token" 

注意oauth2 而不是auth2

天哪。有时我只是需要更多的睡眠。

顺便说一句,我只能在 .Open 请求中仅将基本 URL 和 .send() 中的参数放入时才能使其工作(而不是将它们全部串在一起并“发布”它) )。

现在像魅力一样工作!

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2018-02-03
    • 2014-10-12
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2014-11-30
    • 2015-03-30
    • 2012-06-20
    相关资源
    最近更新 更多