You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VBA中实现Google OAuth2的技术咨询

在MS Access中实现Google OAuth2的核心要点

一、Google OAuth2的API请求URL(分阶段)

Google OAuth2采用授权码流程,并非单次POST/GET请求即可完成,需分三个核心阶段:

  1. 授权引导URL(用户登录授权)
    用于打开浏览器让用户完成登录授权的GET请求URL:

    https://accounts.google.com/o/oauth2/v2/auth
    

    必须携带的参数:

    • client_id:你的Google项目客户端ID
    • redirect_uri:授权完成后跳转的回调地址(本地可配置http://localhost,需提前在Google控制台备案)
    • response_type:固定为code(授权码模式)
    • scope:需获取的权限范围,获取邮箱信息填https://www.googleapis.com/auth/userinfo.email
    • access_type:online(默认,仅临时令牌)或offline(需长期令牌时使用)
  2. 令牌获取URL
    用授权阶段返回的授权码换取访问令牌的POST请求URL:

    https://oauth2.googleapis.com/token
    
  3. 用户信息获取URL
    用访问令牌获取用户邮箱及验证状态的GET请求URL:

    https://www.googleapis.com/oauth2/v2/userinfo
    

二、各阶段请求头要求

  1. 授权引导阶段:无需自定义请求头,直接构造完整GET URL在浏览器打开即可。

  2. 令牌获取阶段(POST请求):

    • 必须设置:Content-Type: application/x-www-form-urlencoded
    • 请求体需包含:code(授权码)、client_id、client_secret、redirect_uri、grant_type=authorization_code
  3. 用户信息获取阶段(GET请求):

    • 必须设置:Authorization: Bearer {你的访问令牌}
    • 可选设置:Accept: application/json(指定返回JSON格式)

三、与Twilio流程的差异及适配思路

你提供的Twilio代码是服务端直接调用API,但Google OAuth2需要用户交互授权,流程需调整为:

  1. 构造授权URL并打开浏览器,引导用户登录授权,获取回调返回的授权码。
  2. 用授权码调用令牌URL换取访问令牌。
  3. 用访问令牌调用用户信息API,提取email和verified_email字段。

核心逻辑示例代码

' 替换为你的Google项目配置信息
Public Const GOOGLE_CLIENT_ID As String = "你的客户端ID"
Public Const GOOGLE_CLIENT_SECRET As String = "你的客户端密钥"
Public Const GOOGLE_REDIRECT_URI As String = "http://localhost" ' 需在Google控制台配置

' 1. 打开浏览器引导用户授权
Public Sub StartGoogleOAuth()
    Dim authUrl As String
    authUrl = "https://accounts.google.com/o/oauth2/v2/auth" & _
              "?client_id=" & URLEncode(GOOGLE_CLIENT_ID) & _
              "&redirect_uri=" & URLEncode(GOOGLE_REDIRECT_URI) & _
              "&response_type=code" & _
              "&scope=" & URLEncode("https://www.googleapis.com/auth/userinfo.email") & _
              "&access_type=online"
    ' 启动浏览器打开授权页
    Shell "explorer.exe " & authUrl, vbNormalFocus
End Sub

' 2. 用授权码换取访问令牌
Public Function GetAccessToken(ByVal authCode As String) As String
    Dim objRequest As Object
    Dim postData As String
    Dim jsonResponse As Object
    
    Set objRequest = CreateObject("Microsoft.XMLHTTP")
    postData = "code=" & URLEncode(authCode) & _
               "&client_id=" & URLEncode(GOOGLE_CLIENT_ID) & _
               "&client_secret=" & URLEncode(GOOGLE_CLIENT_SECRET) & _
               "&redirect_uri=" & URLEncode(GOOGLE_REDIRECT_URI) & _
               "&grant_type=authorization_code"
    
    objRequest.Open "POST", "https://oauth2.googleapis.com/token", False
    objRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    objRequest.Send postData
    
    Set jsonResponse = JsonConverter.ParseJson(objRequest.responseText)
    GetAccessToken = jsonResponse("access_token")
End Function

' 3. 获取用户邮箱及验证状态
Public Sub GetUserEmail(ByVal accessToken As String)
    Dim objRequest As Object
    Dim jsonResponse As Object
    
    Set objRequest = CreateObject("Microsoft.XMLHTTP")
    objRequest.Open "GET", "https://www.googleapis.com/oauth2/v2/userinfo", False
    objRequest.setRequestHeader "Authorization", "Bearer " & accessToken
    objRequest.setRequestHeader "Accept", "application/json"
    objRequest.Send
    
    Set jsonResponse = JsonConverter.ParseJson(objRequest.responseText)
    MsgBox "邮箱: " & jsonResponse("email") & vbCrLf & "已验证: " & jsonResponse("verified_email"), vbInformation
End Sub

关键注意事项

  • 需先在Google云控制台创建项目,启用OAuth2服务,配置客户端ID、密钥及回调地址。
  • 你的MS Access需已安装JsonConverter(与Twilio代码依赖一致)用于解析JSON响应。
  • 回调地址必须提前添加到Google控制台的授权重定向URI列表中。

内容的提问来源于stack exchange,提问作者Noson Rabinovich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:40:29