密码保护静态页面AppEngine HowTo?

时间:2012-02-27 06:49:32

标签: python google-app-engine .htaccess openid .htpasswd

所以我正在使用AppEngine(Python),我想要做的是提供OpenID登录设置默认提供程序,以便用户可以使用该提供程序登录而不会出现问题。问题是,我想在用户登录后立即提示用户输入密码以显示静态内容(HTML页面);如果用户没有输入正确的密码,那么我想将它们重定向到另一个页面。保护必须是服务器端请:)任何想法??

P.S。我正在寻找类似于“.htaccess / htpasswd”的解决方案,但是对于app引擎。

2 个答案:

答案 0 :(得分:2)

AFAIK,GAE不支持此类设置(OpenID登录后的静态密码)。

我认为实现这项工作的唯一方法是通过处理程序提供静态内容:

  1. 客户提出静态内容请求
  2. 您的处理程序已注册以处理此URL
  3. 处理程序检查是用户已通过身份验证。如果没有,请求密码。
  4. 经过身份验证后,处理程序会读取静态文件并将其发送回用户。

答案 1 :(得分:0)

试试这个,您可以使用Google App Engine模仿.htaccess样式密码:

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: Dynamic WWW-Authentication (.htaccess style) on Google App Engine