在VBA中实现Google OAuth2的技术咨询
在MS Access中实现Google OAuth2的核心要点
一、Google OAuth2的API请求URL(分阶段)
Google OAuth2采用授权码流程,并非单次POST/GET请求即可完成,需分三个核心阶段:
授权引导URL(用户登录授权)
用于打开浏览器让用户完成登录授权的GET请求URL:https://accounts.google.com/o/oauth2/v2/auth必须携带的参数:
client_id:你的Google项目客户端IDredirect_uri:授权完成后跳转的回调地址(本地可配置http://localhost,需提前在Google控制台备案)response_type:固定为code(授权码模式)scope:需获取的权限范围,获取邮箱信息填https://www.googleapis.com/auth/userinfo.emailaccess_type:online(默认,仅临时令牌)或offline(需长期令牌时使用)
令牌获取URL
用授权阶段返回的授权码换取访问令牌的POST请求URL:https://oauth2.googleapis.com/token用户信息获取URL
用访问令牌获取用户邮箱及验证状态的GET请求URL:https://www.googleapis.com/oauth2/v2/userinfo
二、各阶段请求头要求
授权引导阶段:无需自定义请求头,直接构造完整GET URL在浏览器打开即可。
令牌获取阶段(POST请求):
- 必须设置:
Content-Type: application/x-www-form-urlencoded - 请求体需包含:
code(授权码)、client_id、client_secret、redirect_uri、grant_type=authorization_code
- 必须设置:
用户信息获取阶段(GET请求):
- 必须设置:
Authorization: Bearer {你的访问令牌} - 可选设置:
Accept: application/json(指定返回JSON格式)
- 必须设置:
三、与Twilio流程的差异及适配思路
你提供的Twilio代码是服务端直接调用API,但Google OAuth2需要用户交互授权,流程需调整为:
- 构造授权URL并打开浏览器,引导用户登录授权,获取回调返回的授权码。
- 用授权码调用令牌URL换取访问令牌。
- 用访问令牌调用用户信息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
相关产品推荐
相关产品推荐

