使用mod_wsgi的HTTP Basic身份验证

时间:2012-11-14 10:32:27

标签: python apache wsgi bottle

我正在尝试使用我写过的以下装饰器使用bottle.py进行HTTP基本身份验证:

def check_auth(username, password):
if username == 'admin' and password == 'pass':
    return True
else:
    return False

def authenticate(msg_string = "Authenticate."):
response.content_type = "application/json"
message = {'message': msg_string}
resp = jsonpickle.encode(message)
response.status = "401 - Unauthorized"
response.headers['WWW-Authenticate'] = 'Basic realm="PyBit"'

return resp

def requires_auth(f):
def decorated(*args, **kwargs):
    print request.auth
    auth = request.auth
    if not auth: 
        return authenticate()
    elif not check_auth(auth[0],auth[1]):
        response.status = "401 - Unauthorized"
        return authenticate("HTTP Authentication Failed.")
    else:
        return f(*args, **kwargs)
return decorated

它可以在内置的wsgiref服务器上运行,但是当我使用mod_wsgi在Apache下运行我的应用程序时。 " auth"对象总是"无"在那种情况下。

apache捏它吗?

1 个答案:

答案 0 :(得分:3)

Nevermimd。排序了。默认情况下不会传递授权标头。我们需要设置WSGIPassAuthorization指令,以控制当存在等效的HTTP请求头时,是否将HTTP授权头传递给WSGI应用程序环境的HTTP_AUTHORIZATION变量中的WSGI应用程序。