[英]Can't access app with curl when using Flask-Kerberos
运行Flask-Kerberos而不是使用Kerberos的Apache时,我无法访问已启用Kerberos的Flask应用程序。
当脚本在Apache(启用了Kerberos的Apache)下运行时,我可以使用curl(使用--negotiate
选项)以及从浏览器访问URL。
当脚本使用Kerberos-Flask独立运行时,我可以从浏览器访问URL,但不能从curl访问。 我收到卷曲的以下错误。
@krbapp.route('/')
@requires_authentication
def index(user):
return "Hello, World!"
curl --negotiate -u foo http://server:5113
Enter host password for user 'foo':
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/site-packages/Flask-0.10.1->py2.7.egg/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/usr/local/lib/python2.7/site-packages/Flask_Kerberos-1.0.3->py2.7.egg/flask_kerberos.py", line 112, in decorated
ctx.kerberos_token])
TypeError: sequence item 1: expected string, NoneType found
找到了解决方法。 这似乎是Kerberos flask库中的错误,但需要进一步挖掘。 在Flask_Kerberos-1.0.3库中的两行下方注释掉了,现在可以正常工作了。
#response.headers ['WWW-Authenticate'] =''.join(['negotiate',
#ctx.kerberos_token])
curl curl --negotiate -u: http://服务器:5005 /
你好,世界!
是的,在我们注释掉上面两行之后,它仍然执行Kerberos身份验证。
擅自
我希望这对其他人有用。
您是否尝试过使用curl --user username:password
选项。 就目前而言,如我所见,您传递的用户名不带密码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.