如何使用 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 的回答
因为我没有域帐户,所以我不能让服务帐户冒充普通帐户。
所以我将关闭此线程
如何使用 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 的回答
因为我没有域帐户,所以我不能让服务帐户冒充普通帐户。
所以我将关闭此线程