如何使用 google 服务帐户设置 google 应用脚本网络应用端点授权?

How to setup google app script web app endpoint authorisation with google service account?

如何使用 google 服务帐户设置 google 应用脚本网络应用端点授权?

首先我在 google 应用程序脚本中有一个网络应用程序:

function doGet() {
  boolResult = isDailyGmailCountLargerThan10()
  console.log(boolResult)
  if(boolResult) return ContentService.createTextOutput('Done');
  else return ContentService.createTextOutput('Error');
}
function isDailyGmailCountLargerThan10(){
  intCount = GmailApp.search("newer_than:1d").length;
  if (intCount>10) return true
  else return false
}

然后我有下面的 python 脚本来发出请求:

import requests
url="https://script.google.com/a/macros/<my_project>/s/<my_script_id>/exec"
r=requests.get(url)
print(r.status_code)
print(r.text)

不幸的是,因为只有我可以访问和执行脚本(这意味着我像这样设置以 [Me] 身份执行 | 谁有权访问 [Me]),它 return 我通过登录页面或未经授权的访问。

因此,我将 python 改写如下:

from google.oauth2 import id_token
from google.oauth2 import service_account
import google.auth
import google.auth.transport.requests
from google.auth.transport.requests import AuthorizedSession

cred_path = '/path/to/key.json'
target_audience = 'https://script.google.com/a/macros/<my_project>/s/<my_script_id>/exec'
url = 'https://script.google.com/a/macros/<my_project>/s/<my_script_id>/exec'

creds = service_account.IDTokenCredentials.from_service_account_file(
        cred_path,
        target_audience=target_audience)

authed_session = AuthorizedSession(creds)

# make authenticated request and print the response, status_code
resp = authed_session.get(url)
print(resp.status_code)
print(resp.text)
# Returned 401  |  Unauthorized


# to verify an ID Token
request = google.auth.transport.requests.Request()
token = creds.token
print(token)
print(id_token.verify_token(token,request))

不幸的是,它 returned 401 未经授权。所以这是我的问题:

如何使用 google 服务帐户在发送 get 请求之前伪装成我 google 应用程序脚本唯一授权用户是我?我找不到任何关于向 google 服务帐户电子邮件授予权限以向我的 google 应用脚本发送请求的参考。

感谢@Iamblichus 的回答

因为我没有域帐户,所以我不能让服务帐户冒充普通帐户。

所以我将关闭此线程