2

我试图在一个应用程序中将一个庞大的Google App Engine应用程序(使用Python &标准环境)拆分为多个服务。默认服务是调用使用另一个服务中的端点框架实现的API。如何检查Google Cloud Endpoints中的服务到服务认证?

除了我不明白如何正确检查默认服务的身份验证(并使其在本地开发服务器和生产环境中均可用)之外,一切都很好。

要调用我使用的服务google-api-python-client和默认应用程序凭证。

from googleapiclient.discovery import build 
from oauth2client.client import GoogleCredentials 
service = build(
    name, version, 
    credentials=GoogleCredentials.get_application_default(), 
    discoveryServiceUrl=discovery_url) 
service.client_token().execute() 

我的服务API代码如下所示

@endpoints.api(
    name='test', 
    version='v1', 
) 
class TestApi(remote.Service): 

    @endpoints.method(
     message_types.VoidMessage, 
     TestResponse, 
     path='test', 
     http_method='GET', 
     name='test') 
    def get_test(self, request): 
     # user = endpoints.get_current_user() 
     # if not user: 
     #  raise endpoints.UnauthorizedException 
     return TestResponse(test='test') 

在生产endpoints.get_current_user()似乎返回正确的应用程序的用户,但我不知道如何正确地验证它是相同的应用程序。在当地开发环境endpoints.get_current_user()返回None

+0

您是否解决了问题? :)我很好奇,如果你做 –

+0

@KingReload是的,它原来是一个相当简单的事情。我必须生成swagger文件并部署它。我会尽量在今天晚些时候发布详细的答案。 – Fedor

+0

很高兴你能够自己解决它^^并通知我有关帖子:)我很好奇 –

回答

-1

你做错了。您正在定义user,但不使用它。

以下示例迎接使用个性化消息登录应用程序的用户并注销链接。如果用户未登录,该应用会提供指向Google帐户登录页面的链接。

如果使用from google.appengine.api import users模块:

def get(self): 
    user = users.get_current_user() 
    if user: 
     nickname = user.nickname() 
     logout_url = users.create_logout_url('/') 
     greeting = 'Welcome, {}! (<a href="{}">sign out</a>)'.format(nickname, logout_url) 
    else: 
     login_url = users.create_login_url('/') 
     greeting = '<a href="{}">Sign in</a>'.format(login_url) 

    self.response.write('<html><body>{}</body></html>'.format(greeting)) 

当创建一个user你仍然需要检查它是否是空的或不是。加user存储不同的值。所以你只需要打电话给他们并定义他们。

如果您的页面需要用户登录才能访问,则可以在您的app.yaml文件中强制执行此操作。

默认情况下,您的应用将使用Google帐户进行身份验证。要选择其他选项,例如Google Apps域,请转到Google云端平台控制台中项目的settings页面,然后点击Edit。在Google身份验证dropdown menu中,选择所需的身份验证类型,然后单击Save。您可以使用Tipfy框架。

+0

我正在使用Google Cloud Endpoints并希望使用它提供的机制来检查身份验证。 – Fedor

+1

@Fedor那么你应该在你的问题中描述过,因为你没有提及它,这应该是解决问题的方法,但是谢谢你审查我的答案:)欣赏它 –