繁体   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