使用 Google 服务进行身份验证
如果脚本使用 Google 服务(如 Google 驱动器、工作表和邮件),则需要获取凭据。 有几个选项可用于获取凭据:
- 选项 1 - 易于遵循,花费的时间更少,但需要在访问令牌过期时每小时重复一次。
- 选项 2 - 稍微复杂一点,但只需在刷新令牌无效时重复此操作。
- 选项 3 — (使用提供的 PowerShell 脚本) 但仅当刷新令牌无效时,才需要重复它。
选项 1 - 从 Google OAuth 操场获取访问令牌
- 转到 Google OAuth 操场
- 在 “输入自己的范围”中,粘贴 https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/gmail.send
- 选择 “授权 API”
- 授权 API 后,为令牌选择“Exchange 授权代码”
- 从响应复制access_token的值
- 在访问 Google 服务的解决方案(如 发现未批准的广告)中,将凭据对象的
accessToken
字段设置为步骤 5 中复制的访问令牌。
注意
由于访问令牌会在 1 小时内过期,因此需要每小时重复这些步骤。
选项 2 - 从 Google OAuth 操场获取刷新令牌
- 转到 Google 开发人员控制台 API 仪表板
- 选择“ 创建项目 ”以创建新项目或选择现有项目
- 如果创建新项目,请在“ 项目名称”中输入项目的名称。 例如,脚本。
- 选择“创建”
- 在 “仪表板”上,选择“ 启用 API 和服务”
- 在搜索框中,输入 工作表 并选择“ Google 工作表 API”。 然后,选择“ 启用”
- 返回到仪表板 (选择“API & 服务”) ,然后针对 Google Drive API 重复步骤 3 和 4
- 返回到仪表板 (选择“API & 服务”) ,并针对 Gmail API 重复步骤 3 和 4
- 在 “仪表板”上,选择左侧导航窗格中的“ 凭据 ”,然后选择“ 配置同意屏幕”。 如果系统要求选择用户类型,请选择“外部”,然后选择“创建”
- 在“应用程序名称”字段中输入应用程序 的名称 , (例如 ,“脚本客户端) ”,并在要求提供该名称的字段中输入电子邮件,然后选择“ 保存并继续”
- 选择“添加或删除范围”,选择“”。/auth/drive 和 。/auth/gmail.send,然后选择“更新”
- 选择“ 保存并继续”
- 选择 “添加用户”,输入 Google 电子邮件,然后选择“ 添加”
- 在“仪表板”上,在左侧导航窗格中选择“凭据”,然后选择“创建凭据”,然后选择“Oauth 客户端 ID”
- 选择“ Web 应用程序 应用程序类型”。 接下来,在“名称”字段中输入一个名称,例如“脚本 Web 应用”。 然后,将 添加到https://developers.google.com/oauthplayground授权的重定向 URI。 最后,选择“创建”
- 复制客户端 ID 和客户端密码以在步骤 18、19 和 24 中使用,然后选择“ 确定”
- 转到 Google OAuth 操场
- 选择“OAuth 2.0 配置”图标, (看起来像右上角的齿轮)
- 选中 “使用自己的 OAuth 凭据 ”框
- 将客户端 ID 粘贴到 OAuth 客户端 ID 中
- 将客户端密码粘贴到 OAuth 客户端密码中
- 在 “输入自己的范围”中,粘贴 https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/gmail.send
- 选择 “授权 API” 并按照提示提供同意
注意
在操场中授权 API 时,如果看到显示“此应用未验证”的对话框,请选择“ 高级 ”,然后选择“ 转到 [应用名称] (不安全) 。
- 授权 API 后,为令牌选择“Exchange 授权代码”
- 从 刷新 令牌复制令牌以在步骤 24 中使用
- 在访问 Google 服务的解决方案(如 发现未批准的广告)中,将凭据对象的
clientId
、clientSecret
和refreshToken
字段设置为在步骤 13 和步骤 22 中收到的值。
选项 3 - 使用 PowerShell 脚本获取刷新令牌
- 转到 Google 开发人员控制台 API 仪表板
- 选择“ 创建项目 ”以创建新项目或选择现有项目
- 如果创建新项目,请在“ 项目名称”中输入项目的名称。 例如,脚本。
- 选择“创建”
- 在 “仪表板”上,选择“ 启用 API 和服务”
- 在搜索框中,输入 工作表 并选择“ Google 工作表 API”。 然后,选择“ 启用”
- 返回到仪表板 (选择“API & 服务”) ,然后针对 Google Drive API 重复步骤 3 和 4
- 返回到仪表板 (选择“API & 服务”) ,并针对 Gmail API 重复步骤 3 和 4
- 在 “仪表板”上,选择左侧导航窗格中的“ 凭据 ”,然后选择“ 配置同意屏幕”。 如果系统要求选择用户类型,请选择“外部”,然后选择“创建”
- 在“应用程序名称”字段中输入应用程序 的名称 , (例如 ,“脚本客户端) ”,并在要求提供该名称的字段中输入电子邮件,然后选择“ 保存并继续”
- 选择“添加或删除范围”,选择“”。/auth/drive 和 。/auth/gmail.send,然后选择“更新”
- 选择“ 保存并继续”
- 选择 “添加用户”,输入 Google 电子邮件,然后选择“ 添加”
- 在“仪表板”上,在左侧导航窗格中选择“凭据”,然后选择“创建凭据”,然后选择“Oauth 客户端 ID”
- 选择“桌面应用应用程序类型”,输入名称 (例如“脚本客户端 creds) ”,然后选择“创建”
- 复制客户端 ID 和客户端密码以在步骤 15 和 16 中使用,然后选择“ 确定”
- 创建 PowerShell 脚本以获取用户同意和刷新令牌。
除非具有刷新令牌,否则获取访问令牌需要用户同意。 但是,由于脚本不支持 UI 组件,因此需要以另一种方式获得同意。 此 PowerShell 提供了一个用于获取同意和刷新令牌的选项。
打开记事本或你喜欢的编辑器,并将 PowerShell 脚本复制到编辑器。 将 和 $clientSecret
设置为$clientId
注册应用时收到的客户端 ID 和机密 (请参阅步骤 13) 。
$clientId = "your-client-id"
$clientSecret = "your-client-secret"
$scopes = "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/gmail.send"
Start-Process "https://accounts.google.com/o/oauth2/v2/auth?client_id=$clientId&scope=$([string]::Join("%20", $scopes))&access_type=offline&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
$code = Read-Host "Please enter the code"
$response = Invoke-WebRequest https://www.googleapis.com/oauth2/v4/token -ContentType application/x-www-form-urlencoded -Method POST -Body "client_id=$clientid&client_secret=$clientSecret&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code=$code&grant_type=authorization_code"
Write-Output "Refresh token: " ($response.Content | ConvertFrom-Json).refresh_token
保存文件并将其命名 GetTokens.ps1 (可以将其命名为所需的任何名称,但扩展名必须 .ps1) 。
现在打开控制台窗口。 若要在 Microsoft Windows 上打开控制台窗口,请在 Windows 按钮>+r) < (输入以下 Windows 运行命令:
cmd.exe
在命令提示符下,导航到保存 GetTokens.ps1 的文件夹并输入以下命令:
powershell.exe -File .\GetTokens.ps1
PowerShell 脚本成功运行时,它会启动一个浏览器会话,你可以在其中输入 Google 凭据。 同意后,网页包含授权代码 (请参阅请复制此代码...) 。
复制授权代码,并在提示符下在控制台窗口中输入它。 然后,PowerShell 脚本将返回刷新令牌。 复制刷新令牌。 应像对待密码一样对待刷新令牌;如果有人掌握了它,他们有权访问你的资源。
- 在访问 Google 服务的解决方案(如 “发现未批准的广告”)中,将凭据对象的
clientId
、clientSecret
和refreshToken
字段设置为在步骤 13 和 14 中收到的值。