我有一个由Django(1.7)驱动的小型商店应用程序,需要使用外部网关处理信用卡。
我有自己的User
表供客户使用。他们通过表单登录,auth数据保存在会话中。
现在,支付网关需要通过SSL& amp;来访问我应用的预定义网址。基本认证
如何使用HTTP Basic Auth保护此(并且仅限于此)URL?另外,我不想在我的User
表中添加网关用户。此外,我不希望我的自定义程序使用其凭据访问该秘密URL(当然,URL不会显示给用户,但您永远不应该信任用户,对吧?)
我可以使用HTTP-server(nginx / apache)设置,但是,我无法通过django测试框架测试这种行为。
有解决方法吗?
答案 0 :(得分:0)
您可以针对自定义凭据手动检查request.META['REMOTE_USER']
和request.META['HTTP_AUTHORIZATION']
,无论这些凭据位于何处。如果请求未得到适当授权,则需要发回HTTP 401 Unauthorized响应:
def some_view(request, **kwargs):
if not remote_user_is_authenticated(...):
response = HttpResponse()
response.status_code = 401
response['WWW-Authenticate'] = 'Basic realm="%s"' % realm
return response
如果您正在使用带有mod_wsgi的Apache,则默认情况下REMOTE_USER
Meta标头不会传递给您的应用程序;您需要将WSGIPassAuthorization On
放入Apache配置文件中。 Nginx可能有类似的设置(或者不是,我真的不知道:P)。