2013-03-28 13 views
6

Googleアカウントの代わりにカスタム認証(GAE Sessions)を使用するPythonアプリでCloud Endpointsを実装しています。 Javascriptクライアントからのリクエストを認証する必要があるので、Cookie情報にアクセスしたいと思います。クラウドエンドポイントHTTP Cookies

this other questionを読むことは、それが可能であると信じていますが、おそらく文書化されていません。私はApp EngineのJava側を熟知していないので、そのスニペットをPythonにどのように翻訳するかについてはあまりよく分かりません。ここに私の方法の一つの例である:

Query_InDonations_Outは、両方のProtoRPCメッセージ( messages.Message)です
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 

。関数内のパラメータreqはちょうどQuery_Inのインスタンスであり、HTTPデータに関連するプロパティは見つかりませんでしたが、間違っている可能性があります。

答えて

13

まず、Tic Tac Toe sampleのように、クライアントからOAuth 2.0を使用することをおすすめします。 ...はヘッダ名に対応したキー'HTTP_...'でWSGI環境で

クッキーは、クッキーヘッダー内のサーバーに送信され、これらの値は、一般的に設定されています。クッキーについては

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

os.getenv('HTTP_COOKIE')はあなたを与えるだろうあなたが求めるヘッダー値。残念ながら、これは既定でGoogleのAPIインフラストラクチャを通過しません。

更新日:これはPythonアプリケーションas of version 1.8.0で有効になっています。クッキーを通じ送信するには、次のように指定します。

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
  • 誰リットルのJava人々のため
  • HTTP_CONTENT_LENGTH
  • HTTP_X_APPENGINE_PEER
  • HTTP_ACCEPT
  • HTTP_USER_AGENT
  • HTTP_X_APPENGINE_CITY
  • HTTP_X_CLIENTDETAILS
  • HTTP_ACCEPT_LANGUAGE
+0

'HTTP_COOKIE'が有効になったらどんな考えですか?私はエンタープライズアプリケーションを実行しており、Tic Tac Toeサンプルで使用されているようにGoogle OAuthを使用することはできません。私は自分のOAuth2プロバイダーの設定について簡単に調査しましたが、ユーザーが認証を2回行わなければならないため、かなり厄介なように思えました。 とにかく、 'HTTP_COOKIE'ヘッダーは人生をはるかに簡単にします。ありがとう! – rhefner1

+0

ここにあなたのために働くサルのパッチがあります:http://pastebin.com/jT7T6xPSリクエストを処理するための 'endpoints.api_server'を作成する前に' api_config.ApiConfigGenerator'を置き換えてください。 – bossylobster

+1

ありがとうDanny!それは完璧に働いた。私はあなたの 'logging.warn'メッセージに基づいてこれが1.7.7で修正されると仮定します。これは素晴らしいことです。 – rhefner1

9

そしてここ。あなたは、エンドポイントでクッキーを使用するためには、以下の注釈を追加する必要があります。

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

source

(それはローカルのdevのサーバー上ではなく、実際のGAEのインスタンス上で動作することをしないと。)

+0

これは、Cloud EndpointsでSpring Securityを使用しているときに役立ちます。 securityContextPersistenceFilterによって認証されたユーザーが設定されているsessionを使用して、このステートメントのエンドポイントを追加するだけです – Pokuri

関連する問題