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那麼你應該在你的問題中描述過,因爲你沒有提及它,這應該是解決問題的方法,但是謝謝你審查我的答案:)欣賞它 –