繁体   English   中英

使用Flask-Kerberos时无法使用curl访问应用

[英]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身份验证。

卷曲http:// server:5005 /

擅自

我希望这对其他人有用。

您是否尝试过使用curl --user username:password选项。 就目前而言,如我所见,您传递的用户名不带密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM