簡體   English   中英

雲端點HTTP Cookie

[英]Cloud Endpoints HTTP Cookies

我正在使用Python應用程序實施Cloud Endpoints,該應用程序使用自定義身份驗證( GAE Sessions )而不是Google帳戶。 我需要驗證來自Javascript客戶端的請求,因此我希望能夠訪問cookie信息。

閱讀這個其他問題讓我相信這是可能的,但也許沒有記錄。 我不熟悉App Engine的Java端,所以我不太確定如何將該片段翻譯成Python。 這是我的一個方法的示例:

class EndpointsAPI(remote.Service):
  @endpoints.method(Query_In, Donations_Out, path='get/donations',
                    http_method='GET', name='get.donations')
  def get_donations(self, req):
    #Authenticate request via cookie

其中Query_InDonations_Out都是ProtoRPC消息( messages.Message )。 函數中的參數req只是Query_In一個實例,我沒有找到任何與HTTP數據相關的屬性,但是我可能錯了。

首先,我建議您嘗試使用來自客戶端的OAuth 2.0,就像在Tic Tac Toe 示例中所做的那樣。

Cookie會在Cookie標頭中發送到服務器,這些值通常在WSGI環境中使用密鑰'HTTP_...' ,其中...對應於標頭名稱:

http = {key: value for key, value in os.environ.iteritems() 
        if key.lower().startswith('http')}

對於cookie, os.getenv('HTTP_COOKIE')將為您提供所尋找的標題值。 不幸的是,默認情況下,這不會通過Google的API基礎結構傳遞。

更新 :自1.8.0版本起,已為Python應用程序啟用此功能。 要通過cookie發送,請指定以下內容:

from google.appengine.ext.endpoints import api_config

AUTH_CONFIG = api_config.ApiAuth(allow_cookie_auth=True)

@endpoints.api(name='myapi', version='v1', auth=AUTH_CONFIG, ...)
class MyApi(remote.service):
    ...

這是一個(不一定是全面的列表)標題,通過它:

  • HTTP_AUTHORIZATION
  • HTTP_REFERER
  • HTTP_X_APPENGINE_COUNTRY
  • HTTP_X_APPENGINE_CITYLATLONG
  • HTTP_ORIGIN
  • HTTP_ACCEPT_CHARSET
  • HTTP_ORIGINALMETHOD
  • HTTP_X_APPENGINE_REGION
  • HTTP_X_ORIGIN
  • HTTP_X_REFERER
  • HTTP_X_JAVASCRIPT_USER_AGENT
  • HTTP_METHOD
  • HTTP_HOST
  • HTTP_CONTENT_TYPE
  • HTTP_CONTENT_LENGTH
  • HTTP_X_APPENGINE_PEER
  • HTTP_ACCEPT
  • HTTP_USER_AGENT
  • HTTP_X_APPENGINE_CITY
  • HTTP_X_CLIENTDETAILS
  • HTTP_ACCEPT_LANGUAGE

對於在這里降落的Java人。 您需要添加以下注釋才能在端點中使用Cookie:

@Api(auth = @ApiAuth(allowCookieAuth = AnnotationBoolean.TRUE))

資源

(沒有它,它將在本地開發服務器上工作,但不在真正的GAE實例上工作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM