Защита паролем статической страницы AppEngine HowTo? - PullRequest
0 голосов
/ 27 февраля 2012

Итак, я работаю с AppEngine (Python), и я хочу предоставить OpenID Login настройку поставщика по умолчанию, чтобы пользователь мог без проблем войти в систему с помощью этого поставщика.Дело в том, что я хочу предложить пользователю пароль сразу после входа в систему, чтобы показать статический контент (HTML-страницы);Если пользователь не введет правильный пароль, я хочу перенаправить его на другую страницу.Защита должна быть на стороне сервера, пожалуйста :) Любые идеи ??

PS Я ищу решение, похожее на ".htaccess / htpasswd", но для механизма приложений.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

AFAIK, GAE не поддерживает такую ​​настройку (статический пароль после входа в OpenID).

Единственный способ, с помощью которого я могу выполнить эту работу, - это обслуживать статический контент через ваш обработчик:

  1. Клиент отправляет запрос на статическое содержимое
  2. Ваш обработчик зарегистрирован для обработки этого URL-адреса
  3. Проверки обработчика проверяются пользователем.Если нет, запрашивает пароль.
  4. При аутентификации обработчик считывает статический файл и отправляет его обратно пользователю.
0 голосов
/ 25 сентября 2013

Попробуйте, вы можете имитировать пароль в стиле .htaccess с помощью Google App Engine:

def basicAuth(func):
  def callf(webappRequest, *args, **kwargs):
    # Parse the header to extract a user/password combo.
    # We're expecting something like "Basic XZxgZRTpbjpvcGVuIHYlc4FkZQ=="
    auth_header = webappRequest.request.headers.get('Authorization')

    if auth_header == None:
      webappRequest.response.set_status(401, message="Authorization Required")
      webappRequest.response.headers['WWW-Authenticate'] = 'Basic realm="Kalydo School"'
    else:
      # Isolate the encoded user/passwd and decode it
      auth_parts = auth_header.split(' ')
      user_pass_parts = base64.b64decode(auth_parts[1]).split(':')
      user_arg = user_pass_parts[0]
      pass_arg = user_pass_parts[1]

      if user_arg != "admin" or pass_arg != "foobar":
        webappRequest.response.set_status(401, message="Authorization Required")
        webappRequest.response.headers['WWW-Authenticate'] = 'Basic realm="Secure Area"'
        # Rendering a 401 Error page is a good way to go...
        self.response.out.write(template.render('templates/error/401.html', {}))
      else:
        return func(webappRequest, *args, **kwargs)

  return callf

class AuthTest(webapp.RequestHandler):
  @basicAuth
  def get(self):
     ....

How-To: Динамическая WWW-аутентификация (стиль .htaccess) в Google App Engine

...