当前位置: 首页 > 知识库问答 >
问题:

离线访问的Google日历Oauth

毛镜
2023-03-14

我试图使用VBScript和Oauth脱机访问谷歌日历API。我设法获得了一个刷新令牌和一个访问令牌,现在我想进入实际使用API的步骤,使用以下代码:

sUrl="https://www.googleapis.com/calendar/v3/users/me/calendarList"
sRequest = "access_token="&accesstoken

response=HTTPPost (sUrl, sRequest)

Function HTTPPost(sUrl, sRequest)
    set oHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    oHTTP.open "POST", sUrl,false
    oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    oHTTP.setRequestHeader "Content-Length", Len(sRequest)
    oHTTP.send sRequest
    HTTPPost = oHTTP.responseText
End Function

我得到的回应是:

    {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "authError",
    "message": "Invalid Credentials",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Invalid Credentials"
 }
}

即使访问令牌是有效的--如果我将sURL更改为https://www.googleapis.com/oauth2/v1/tokeninfo并运行该脚本,我将得到以下响应,显示一个有效的令牌:

{
"issued_to": "...",
 "audience": "...,
"scope": "https://www.googleapis.com/auth/calendar",
"expires_in": 2568,
"access_type": "offline"
}

如果我粘贴URL https://www.googleapis.com/calendar/v3/users/me/calendarlist?access_token=...在浏览器中,我从谷歌获得了一个有效的响应,列出了用户的日历

共有1个答案

姬朗
2023-03-14

401:无效凭据

无效的授权标头。您正在使用的访问令牌已过期或无效。

访问令牌只能使用1小时。小时结束后,访问令牌过期,您需要使用刷新令牌来请求一个新令牌。

获取新acesss令牌的原始代码如下所示。关键字是grant_type=refresh_token,这告诉身份验证服务器您正在请求一个新的令牌。

https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token
 类似资料:
  • 我正在尝试使用Google OAuth2 api获取用户的配置文件。用户身份验证后,在同意页面上,我总是被要求“离线访问” 浏览器中的网址如下所示:- https://accounts.google.com/o/oauth2/auth?scope=email 如上面的URL中可见,我已将范围参数传递为“电子邮件” Google Auth API页面说:- “此范围要求您的应用程序能够访问: 用户的

  • 我试图在我的应用程序中使用Google Oauth2实现增量授权。 起初,当用户登录时,应用程序正在请求一些范围和脱机访问。我正在数据库中生成和存储刷新令牌,以便在需要时刷新访问令牌以进行API调用。 现在我要实现一个新功能,它将请求一个新的作用域,但我只想在用户尝试使用这个新功能时请求这个作用域。 我面临的问题是,当应用程序提示用户同意新范围时,谷歌正在请求访问所有以前接受的范围。 我尝试过不使

  • 这是我之前问题的后续:如何从远程服务器访问Google Drive应用程序数据? 我有一个需要访问Google Drive AppFolder的应用程序,包括客户端(在线、JavaScript)和服务器端(离线、Python)。我的应用程序是独一无二的,因为客户端和服务器可能无法通过原始身份验证进行通信。 因此,我使用下面的代码来获取服务器的auth令牌(启动客户端): 服务器存储包括刷新令牌在内

  • 我正在尝试使用谷歌API的v3从客户的公共日历中获取事件列表。我在API Explorer中输入了日历ID,得到了一个肯定的结果: 为了创建 API 密钥,我在 Google 开发者控制台中创建了一个项目,并创建了一个公共 API 访问密钥 (API 我看到的所有回复都表明,您需要确保Google Calendar API已打开,而且它确实已打开(默认情况下也是打开的)。我在这里错过了什么?

  • 我正在尝试使用Google API获得<code>离线访问</code>。我必须从谷歌日历中提取数据,而无需用户每次登录。 我已将以下内容添加到我的 Gem 文件中: https://accounts.google.com/o/oauth2/auth?access_type=offline 我错过什么了吗?

  • 我正在尝试构建一个web应用程序,它可以访问用户的Google日历API,而不需要用户真正在那里。所以基本上是在后台从我的服务器(PHP脚本)添加或修改Google日历中的事件。 我已经是Google Calendar的oauth2了,我为他们准备了一个刷新令牌,这样他们就不必每次都重新登录了。他们只需登录oauth一次,就很好了。但是我怎样才能使服务器能够在后台进行更改呢?