个人用Outlook VBA同步谷歌日历:OAuth授权相关疑问
Outlook VBA同步谷歌日历的OAuth相关问题
我正在编写供个人使用的Outlook VBA,希望在Outlook日历添加事件时同步更新谷歌日历。现有触发事件添加的代码如下:
Private Sub curCal_ItemAdd(ByVal Item As Object) Dim cAppt As AppointmentItem Dim moveCal As AppointmentItem ' On Error Resume Next 'remove to make a copy of all items If Item.BusyStatus = olBusy Then Item.Body = Item.Body & "[" & CreateGUID & "]" Item.Save Set cAppt = Application.CreateItem(olAppointmentItem) With cAppt .Subject = "Copied: " & Item.Subject .Start = Item.Start .Duration = Item.Duration .Location = Item.Location .Body = Item.Body End With ' set the category after it's moved to force EAS to sync changes Set moveCal = cAppt.Move(newCalFolder) moveCal.Categories = "moved" moveCal.Save ' build the json string which will be sent to the google API Dim d As New Scripting.Dictionary d.Add "kind", "calendar#event" d.Add "summary", "Event Title/Summary" Dim d2(4) As New Scripting.Dictionary d2(0).Add "dateTime", Item.Start d.Add "start", d2(0) d2(1).Add "dateTime", Item.End d.Add "end", d2(1) Dim Json As String Json = JsonConverter.ConvertToJson(d, Whitespace:=" ") ' send the json string via POST Set httpCall = CreateObject("MSXML2.ServerXMLHTTP") Dim sURL As String sURL = "https://www.googleapis.com/calendar/v3/calendars/my_personal@gmail.com/events?sendNotifications=false&fields=etag%2ChtmlLink%2Cid&pp=1&key=a_google_generated_auth_key" httpCall.Open "POST", sURL, False httpCall.setRequestHeader "Content-Type", "application/json;charset=UTF-8" httpCall.Send Json Dim sReturn As String sReturn = httpCall.responseText MsgBox (sReturn) End If End Sub
运行时JSON可正常生成并发送至谷歌,但谷歌反馈日历API需要OAuth 2.0密钥。现咨询以下问题:
- 能否无需完成谷歌开发者注册及配置OAuth 2.0密钥,即可使用谷歌日历API?
- 谷歌官网提到多平台调用API需多个OAuth 2.0密钥,是否意味着桌面端和手机端的Outlook需分别配置不同密钥?
- 若必须生成OAuth 2.0密钥,添加事件时是每次都会弹出授权界面,还是仅需完成一次授权即可?
问题解答
1. 能否跳过谷歌开发者注册和OAuth 2.0配置?
不行。谷歌日历API属于需要身份验证的受限API,所有写入(比如添加事件)操作都必须通过OAuth 2.0完成身份验证,没有绕开的途径。哪怕是个人使用,也得注册谷歌开发者账号,创建项目并配置OAuth 2.0凭据才能调用API。
2. 桌面端和手机端Outlook需要不同的OAuth密钥吗?
不需要。你只需要创建一个桌面应用类型的OAuth 2.0客户端ID即可,这个凭据可以同时用于桌面端和手机端的Outlook VBA调用。谷歌所谓的多平台密钥是指不同类型的应用(比如Web应用、iOS应用、Android应用)需要不同的客户端ID,但桌面和手机的Outlook VBA都属于桌面/本地应用范畴,共用一个桌面类型的客户端ID就行。
3. 授权需要每次都弹界面吗?
仅需一次授权。当你第一次运行代码时,会弹出谷歌的授权页面,授权后,VBA可以把生成的刷新令牌(refresh token)保存到本地(比如注册表、文本文件),之后每次调用API时,用刷新令牌自动获取新的访问令牌(access token),不需要再手动授权。不过要注意,刷新令牌如果长期不用可能会失效,或者谷歌账号的安全设置变更也可能导致令牌失效,这种情况下才需要重新授权。
内容的提问来源于stack exchange,提问作者Jonathan Small
相关产品推荐
相关产品推荐

