使用服务帐户授权对App Engine应用程序的请求

时间:2018-08-29 15:28:57

标签: google-app-engine

我在app.yaml中使用login: admin的{​​{1}}将访问我的应用程序限制为仅对选定的Google帐户(可以在IAM中进行编辑)。我正在GAE上使用handlers标准环境。

我想使用我的应用程序从另一个服务器应用程序(不在GAE上托管)公开的JSON API。使用服务帐户似乎是一个简单的解决方案,但是我无法正确获取范围或请求本身,因此端点将看到经过身份验证的Google用户。

python27当前在IAM中扮演service-user的角色。我尝试了更多类似Project/ViewerAppEngine/Viewer的方法。我还尝试了更多范围。

我的测试代码:

AppEngine/Admin

没有错误,请求的行为类似于未经身份验证的行为。我检查了服务器上的标头,并在浏览器中请求多个"""Try do do an API request to a deployed app with the current service account. https://google-auth.readthedocs.io/en/latest/user-guide.html """ import sys from google.auth.transport.requests import AuthorizedSession from google.oauth2 import service_account def main(): if len(sys.argv) < 2: sys.exit("use: %s url" % sys.argv[0]) credentials = service_account.Credentials.from_service_account_file( 'service-user.json') scoped_credentials = credentials.with_scopes( ['https://www.googleapis.com/auth/cloud-platform.read-only']) authed_http = AuthorizedSession(scoped_credentials) response = authed_http.request('GET', sys.argv[1]) print response.status_code, response.reason print response.text.encode('utf-8') if __name__ == '__main__': main() cookie的同时,session请求包含一个AuthorizedSession标头。

1 个答案:

答案 0 :(得分:0)

通常,您需要的角色是App Engine Admin;它是为此目的而设计的。它也应该与viewer/editor/owner primitive roles一起使用。话虽这么说,要确保它不是“角色”问题,只需为其分配项目所有者角色以及显式的App Engine Admin角色,然后重试即可。这将消除任何基于角色的问题。

让我知道这是否对您有用。