7

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

この他の質問を読むと、それは可能だと思いますが、おそらく文書化されていません。私は App Engine の Java 側に詳しくないので、そのスニペットを Python に変換する方法がよくわかりません。これが私の方法の1つの例です:

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_In、 とDonations_Outは両方とも ProtoRPC メッセージ ( messages.Message) です。関数のパラメーターreqは単なるインスタンスでQuery_Inあり、HTTP データに関連するプロパティは見つかりませんでしたが、間違っている可能性があります。

4

2 に答える 2

14

まず、Tic Tac Toeサンプルで行われているように、クライアントから OAuth 2.0 を使用することをお勧めします。

Cookie は Cookie ヘッダーでサーバーに送信され、これらの値は通常、ヘッダー名'HTTP_...'...対応するキーを使用して WSGI 環境で設定されます。

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

Cookieos.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
于 2013-03-28T22:57:47.280 に答える
10

ここにたどり着いたJavaの人々のために。エンドポイントで Cookie を使用するには、次の注釈を追加する必要があります。

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

ソース

(そうしないと、ローカルの開発サーバーでは機能しますが、実際の G​​AE インスタンスでは機能しません。)

于 2015-02-26T14:47:35.573 に答える