Безопасный remote_api в движке приложения с OpenID - PullRequest
42 голосов
/ 12 июля 2010

Ранее я задавал вопрос об использовании remote_api ядра приложения с openID, и ответ работал хорошо, как безопасно, так и небезопасно.В какой-то момент вскоре, однако, что-то в движке приложения изменилось, и решение перестало работать надежно - то есть следующие

remote_api_stub.ConfigureRemoteDatastore(app_id=app_id, path='/remote_api', auth_func=auth_func, servername=host, secure=True)

перестали работать (всегда возвращая 302), и мне нужно было удалить аргумент secureчтобы заставить его работать.

Релиз 1.3.5 SDK обещал «Удаленные команды API можно отправлять через HTTPS или HTTP», что меня смутило, поскольку я был под впечатлениемчто предоставление аргумента «secure = True» уже давало мне это, основываясь на этом обсуждении .

Я подозреваю, что именно выпуск этой функции вызвал «безопасный»аргумент, чтобы перестать работать.Итак, первая часть моего вопроса - действительно ли я выполнял команды remote_api безопасно, используя аргумент 'secure = True', перед выпуском 1.3.5?

Как только взломанный cookie перестал работать безопасно, я попыталсяРешение Ника Джонсона, перечисленное в том же вопросе, но с этим также я не смог предоставить 'secure = True', получив тот же ответ 302.

Что мне нужно сделать для безопасного запуска remote_api с openID?Включает ли 1.3.5 новые возможности для этого и как их использовать?Приветствия,

Колин

1 Ответ

1 голос
/ 07 сентября 2010

С учетом этого

http://code.google.com/intl/en-US/appengine/articles/openid.html

ВНИМАНИЕ: на момент написания этой статьи OpenID не поддерживается, если ваше приложение работает в безопасном режиме с использованием HTTPS.

С уважением это в последней редакции выпуска 1.3.7

def ConfigureRemoteDatastore(app_id,
                             path,
                             auth_func,
                             servername=None,
                             rpc_server_factory=appengine_rpc.HttpRpcServer,
                             rtok=None,
                             secure=False):
  """Does necessary setup to allow easy remote access to an AppEngine datastore.

  Either servername must be provided or app_id must not be None.  If app_id
  is None and a servername is provided, this function will send a request
  to the server to retrieve the app_id.

  Args:
    app_id: The app_id of your app, as declared in app.yaml.
    path: The path to the remote_api handler for your app
      (for example, '/remote_api').
    auth_func: A function that takes no arguments and returns a
      (username, password) tuple. This will be called if your application
      requires authentication to access the remote_api handler (it should!)
      and you do not already have a valid auth cookie.
    servername: The hostname your app is deployed on. Defaults to
      <app_id>.appspot.com.
    rpc_server_factory: A factory to construct the rpc server for the datastore.
    rtok: The validation token to sent with app_id lookups. If None, a random
      token is used.
    secure: Use SSL when communicating with the server.

Итак, вы пробовали его с новым SDK?

...