使用 Google 服务进行身份验证

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

  • 选项 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 后,为令牌选择“Exchange 授权代码
  5. 从响应复制access_token的值
  6. 在访问 Google 服务的解决方案(如 发现未批准的广告)中,将凭据对象的 accessToken 字段设置为步骤 5 中复制的访问令牌。

注意

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

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

  1. 转到 Google 开发人员控制台 API 仪表板
  2. 选择“ 创建项目 ”以创建新项目或选择现有项目
    1. 如果创建新项目,请在“ 项目名称”中输入项目的名称。 例如,脚本。
    2. 选择“创建”
  3. “仪表板”上,选择“ 启用 API 和服务”
  4. 在搜索框中,输入 工作表 并选择“ Google 工作表 API”。 然后,选择“ 启用”
  5. 返回到仪表板 (选择“API & 服务”) ,然后针对 Google Drive API 重复步骤 3 和 4
  6. 返回到仪表板 (选择“API & 服务”) ,并针对 Gmail API 重复步骤 3 和 4
  7. “仪表板”上,选择左侧导航窗格中的“ 凭据 ”,然后选择“ 配置同意屏幕”。 如果系统要求选择用户类型,请选择“外部”,然后选择“创建
  8. 在“应用程序名称”字段中输入应用程序 的名称 , (例如 ,“脚本客户端) ”,并在要求提供该名称的字段中输入电子邮件,然后选择“ 保存并继续”
  9. 选择“添加或删除范围”,选择“”。/auth/drive。/auth/gmail.send,然后选择“更新
  10. 选择“ 保存并继续”
  11. 选择 “添加用户”,输入 Google 电子邮件,然后选择“ 添加”
  12. “仪表板”上,在左侧导航窗格中选择“凭据”,然后选择“创建凭据”,然后选择“Oauth 客户端 ID
  13. 选择“ Web 应用程序 应用程序类型”。 接下来,在“名称”字段中输入一个名称,例如“脚本 Web 应用”。 然后,将 添加到https://developers.google.com/oauthplayground授权的重定向 URI。 最后,选择“创建
  14. 复制客户端 ID 和客户端密码以在步骤 18、19 和 24 中使用,然后选择“ 确定”
  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 后,为令牌选择“Exchange 授权代码
  2. 刷新 令牌复制令牌以在步骤 24 中使用
  3. 在访问 Google 服务的解决方案(如 发现未批准的广告)中,将凭据对象的 clientIdclientSecretrefreshToken 字段设置为在步骤 13 和步骤 22 中收到的值。

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

  1. 转到 Google 开发人员控制台 API 仪表板
  2. 选择“ 创建项目 ”以创建新项目或选择现有项目
    1. 如果创建新项目,请在“ 项目名称”中输入项目的名称。 例如,脚本。
    2. 选择“创建”
  3. “仪表板”上,选择“ 启用 API 和服务”
  4. 在搜索框中,输入 工作表 并选择“ Google 工作表 API”。 然后,选择“ 启用”
  5. 返回到仪表板 (选择“API & 服务”) ,然后针对 Google Drive API 重复步骤 3 和 4
  6. 返回到仪表板 (选择“API & 服务”) ,并针对 Gmail API 重复步骤 3 和 4
  7. “仪表板”上,选择左侧导航窗格中的“ 凭据 ”,然后选择“ 配置同意屏幕”。 如果系统要求选择用户类型,请选择“外部”,然后选择“创建
  8. 在“应用程序名称”字段中输入应用程序 的名称 , (例如 ,“脚本客户端) ”,并在要求提供该名称的字段中输入电子邮件,然后选择“ 保存并继续”
  9. 选择“添加或删除范围”,选择“”。/auth/drive。/auth/gmail.send,然后选择“更新
  10. 选择“ 保存并继续”
  11. 选择 “添加用户”,输入 Google 电子邮件,然后选择“ 添加”
  12. “仪表板”上,在左侧导航窗格中选择“凭据”,然后选择“创建凭据”,然后选择“Oauth 客户端 ID
  13. 选择“桌面应用应用程序类型”,输入名称 (例如“脚本客户端 creds) ”,然后选择“创建
  14. 复制客户端 ID 和客户端密码以在步骤 15 和 16 中使用,然后选择“ 确定”
  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 中收到的值。