google-app-engine - users - google cloud platform api manager



如何在Google Cloud Endpoints中檢查服務到服務的身份驗證? (1)

我試圖在一個應用程序中將一個龐大的Google App Engine應用程序(使用Python和標準環境)分成幾個服務。 默認服務是使用另一個服務中的端點框架調用API。

一切正常,但我不明白如何正確地檢查默認服務的身份驗證(並使其在本地開發服務器和生產中都可以)。

要調用服務,我正在使用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


你這樣做是錯的。 你正在定義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您仍然需要檢查是否為空。 Plus user存儲不同的值。 所以你只需要打電話給他們定義他們。

如果您的頁面需要用戶登錄才能訪問,則可以在app.yaml文件中強制執行此操作。

默認情況下,您的應用將使用Google帳戶進行身份驗證。 要選擇其他選項(如Google Apps域),請轉到Google雲端平台控制台中項目的設置頁面,然後點擊Edit 。 在Google認證dropdown menu ,選擇所需的認證類型,然後點擊Save

你也可以使用Tipfy框架。





google-oauth2