使用 Google 服务进行身份验证

如果脚本使用 Google 服务(如 Google Drive、表格和邮件),则需要获取凭据。 有几个选项可用于获取凭据:

  • 选项 1 — 易于遵循,花费的时间更少,但当访问令牌过期时,您需要每小时重复一次。
  • 选项 2 - 稍微复杂一些,但只有在刷新令牌无效时才需要重复此操作。
  • 选项 3 - 使用提供的 PowerShell 脚本) (也稍微复杂一些,但只有在刷新令牌无效时才需要重复此操作。

选项 1 - 从 Google OAuth 操场获取访问令牌

  1. 转到 Google OAuth 操场
  2. “输入自己的作用域”中,粘贴 https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/gmail.send
  3. 选择 “授权 API”
  4. 在对 API 进行授权后,选择 交换令牌的授权代码
  5. 从响应中复制access_token的值
  6. 在访问 Google 服务 的“发现未经批准的广告”等解决方案中,将凭据对象的 accessToken 字段设置为在步骤 5 中复制的访问令牌。

注意

由于访问令牌将在 1 小时后过期,因此需要每小时重复这些步骤一次。

选项 2 - 从 Google OAuth 操场获取刷新令牌

  1. 转到 Google 开发者控制台 API 仪表板
  2. 选择“ 创建项目 ”以创建新项目或选择现有项目
    1. 如果创建新项目,请在 “项目名称”中输入项目名称。 例如,脚本。
    2. 选择“创建”
  3. 仪表板上,选择“启用 API 和服务
  4. 在搜索框中输入 工作表并 选择 Google 表格 API。 然后选择“启用
  5. 返回到仪表板 (选择 API & Services) ,然后对 Google Drive API 重复步骤 3 和步骤 4
  6. 返回到仪表板 (选择 API & Services) ,然后对 Gmail API 重复步骤 3 和步骤 4
  7. 仪表板上,选择左侧导航窗格中的 “凭据 ”,然后选择“ 配置同意屏幕”。 如果要求选择用户类型,请选择“外部”,然后选择“创建
  8. 应用程序名称字段中输入应用程序的名称 (例如,脚本客户端) ,并在要求输入的字段中输入电子邮件,然后选择“保存并继续
  9. 选择 ADD OR REMOVE SCOPES, SELECT ../auth/drive and ../auth/gmail.send,然后选择“更新
  10. 选择 “保存并继续”
  11. 选择“添加用户”,输入你的 Google 电子邮件,然后选择“添加
  12. 仪表板上,选择左侧导航窗格中的“凭据”,然后选择“创建凭据”,然后选择“Oauth 客户端 ID
  13. 选择 Web 应用程序 应用程序类型。 接下来,在“名称”字段中输入一个名称,例如脚本 Web 应用。 然后,添加到https://developers.google.com/oauthplayground授权重定向 URI。 最后,选择“创建
  14. 复制要在步骤 18、19 和 24 中使用的客户端 ID 和客户端密码,然后选择“ 确定”
  15. 转到 Google OAuth 操场
  16. 选择 OAuth 2.0 配置图标 (右上角看起来像齿轮)
  17. 选中 “使用自己的 OAuth 凭据”
  18. 将客户端 ID 粘贴到 OAuth 客户端 ID
  19. 将客户端密码粘贴到 OAuth 客户端密码
  20. “输入自己的作用域”中,粘贴 https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/gmail.send
  21. 选择 “授权 API” ,然后按照提示提供许可

注意

在操场中授权 API 时,如果看到显示“此应用未验证”的对话框,请选择“ 高级 ”,然后转到“ [应用名称]” (不安全的)

  1. 在对 API 进行授权后,选择 交换令牌的授权代码
  2. “刷新令牌 ”复制要在步骤 24 中使用的令牌
  3. 在访问 Google 服务的“ 发现未经批准的广告”等解决方案中,将凭据对象的 clientIdclientSecretrefreshToken 字段设置为您在步骤 13 和 22 中收到的值。

选项 3 - 使用 PowerShell 脚本获取刷新令牌

  1. 转到 Google 开发者控制台 API 仪表板
  2. 选择“ 创建项目 ”以创建新项目或选择现有项目
    1. 如果创建新项目,请在 “项目名称”中输入项目名称。 例如,脚本。
    2. 选择“创建”
  3. 仪表板上,选择“启用 API 和服务
  4. 在搜索框中输入 工作表并 选择 Google 表格 API。 然后选择“启用
  5. 返回到仪表板 (选择 API & Services) ,然后对 Google Drive API 重复步骤 3 和步骤 4
  6. 返回到仪表板 (选择 API & Services) ,然后对 Gmail API 重复步骤 3 和步骤 4
  7. 仪表板上,选择左侧导航窗格中的 “凭据 ”,然后选择“ 配置同意屏幕”。 如果要求选择用户类型,请选择“外部”,然后选择“创建
  8. 应用程序名称字段中输入应用程序的名称 (例如,脚本客户端) ,并在要求输入的字段中输入电子邮件,然后选择“保存并继续
  9. 选择 ADD OR REMOVE SCOPES, SELECT ../auth/drive and ../auth/gmail.send,然后选择“更新
  10. 选择 “保存并继续”
  11. 选择“添加用户”,输入你的 Google 电子邮件,然后选择“添加
  12. 仪表板上,选择左侧导航窗格中的“凭据”,然后选择“创建凭据”,然后选择“Oauth 客户端 ID
  13. 选择“桌面应用应用程序类型”,输入名称 (例如“脚本客户端信任) ”,然后选择“创建
  14. 复制要在步骤 15 和 16 中使用的客户端 ID 和客户端密码,然后选择“ 确定”
  15. 创建 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 脚本返回刷新令牌。 复制刷新令牌。 应像对待密码一样对待刷新令牌;如果有人掌握了它,他们就有权访问你的资源。

  1. 在访问 Google 服务的“ 发现未经批准的广告”等解决方案中,将凭据对象的 clientIdclientSecretrefreshToken 字段设置为您在步骤 13 和 14 中收到的值。