Cloud Endpoint身份验证受众

时间:2017-01-25 12:08:09

标签: android google-app-engine google-cloud-endpoints

我使用Google Cloud Endpoint Framework在Python中创建了一个API,而我的Android客户端是唯一有权与API通信的应用程序。

我按照Google上的身份验证教程和指南来保护API,可以访问特定的客户ID:

WEB_CLIENT_ID = 'myApiClientId.apps.googleusercontent.com'
ANDROID_CLIENT_ID = 'myAndroidClientId.apps.googleusercontent.com'
ANDROID_AUDIENCE = [ANDROID_CLIENT_ID]
ALLOWED_CLIENT_IDS = [WEB_CLIENT_ID, ANDROID_CLIENT_ID, endpoints.API_EXPLORER_CLIENT_ID]

api_collection = endpoints.api(name='myApi',
                               version='v1',
                               allowed_client_ids=ALLOWED_CLIENT_IDS,
                               audiences=ANDROID_AUDIENCE,
                               auth_level=endpoints.AUTH_LEVEL.REQUIRED
                               )

在这个site上他们说"观众"应该包含后端api的客户端ID

  

对于Android客户端,此机制是audiences参数,您可以在其中指定后端API的客户端ID。

但在this网站上,他们会告诉观众"字段应包含Android客户端ID:

  

将ALLOWED_CLIENT_IDS替换为从每个客户端的Google Cloud Platform Console项目生成的OAuth 2客户端ID列表,并将ANDROID_AUDIENCE替换为Android Web客户端ID列表。 Web客户端ID是附加了.apps.googleusercontent.co的客户端ID,例如:YOUR-CLIENT-ID.apps.googleusercontent.com。

保护API以进行未经授权的访问的正确方法是什么?我不需要"用户"在后端帐户,我只希望Android客户端是唯一可以访问API的客户端。虽然指定了客户端ID并且在需要时设置了AUTH_LEVEL,但我的REST客户端也可以访问API。

1 个答案:

答案 0 :(得分:0)

似乎ANDROID_AUDIENCE必须是后端服务器的Web客户端ID。此外,我不得不为我的Android应用程序添加一个新的“Web客户端ID”,但不是“Android”类型,而是“Webapplication”。此客户端ID必须与Android客户端ID一起位于google-services.json中,并且位于后端服务器的ALLOWED_CLIENT_IDS阵列中。

在每个方法中我都要检查get_current_user()。我不明白为什么这是必要的,但它只是这样。

我真的想说文档或更好的“指南”在Google网站上可能会更加一致并且一致。