我在app.yaml
中使用login: admin
的{{1}}将访问我的应用程序限制为仅对选定的Google帐户(可以在IAM中进行编辑)。我正在GAE上使用handlers
标准环境。
我想使用我的应用程序从另一个服务器应用程序(不在GAE上托管)公开的JSON API。使用服务帐户似乎是一个简单的解决方案,但是我无法正确获取范围或请求本身,因此端点将看到经过身份验证的Google用户。
python27
当前在IAM中扮演service-user
的角色。我尝试了更多类似Project/Viewer
,AppEngine/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
标头。
答案 0 :(得分:0)
通常,您需要的角色是App Engine Admin;它是为此目的而设计的。它也应该与viewer/editor/owner primitive roles一起使用。话虽这么说,要确保它不是“角色”问题,只需为其分配项目所有者角色以及显式的App Engine Admin角色,然后重试即可。这将消除任何基于角色的问题。
让我知道这是否对您有用。