【发布时间】:2017-10-25 11:05:16
【问题描述】:
我正在为在 Ubuntu 16.04 上运行的 Flask 服务器实现单点登录机制,该机制针对 Windows 域中的 Active Directory 服务器对用户进行身份验证。
当我在 Flask 服务器上从 https://github.com/mkomitee/flask-kerberos/tree/master/example 运行示例应用程序时,我可以从已登录的客户端计算机访问 Flask 服务器,服务器正确协商访问并返回登录用户的名称。但是,这非常慢,大约需要两分钟。
按照flask-kerberos 中发生的步骤,我发现进程在authGSSServerInit step 处停止。我可以使用以下最小程序重现该行为:
import kerberos
rc, state = kerberos.authGSSServerInit("HTTP@flaskserver.mydomain.local")
初始化成功完成,但又需要大约两分钟。
我已成功在 AD 服务器上注册服务主体 (HTTP/flaskserver.mydomain.local) 并将 keytab 导出到 Flask 服务器。我可以使用kinit -k HTTP/flaskserver.mydomain.local 在 Flask 服务器上获得票证授予票证。我还可以使用kerberos 库在 Python 中验证密码:
import kerberos
kerberos.checkPassword('username', 'password', 'HTTP/flaskserver.mydomain.local', 'MYDOMAIN.LOCAL'
这几乎可以立即正确运行。
kerberos.authGSSServerInit 运行延迟的原因可能是什么?我该如何调试?
【问题讨论】:
-
你有没有检查过wireshark的踪迹?
-
我没有跟踪(只是因为我没有任何经验),但是您的关键字帮助我搜索了这个问题。事实证明,这种停滞是由反向 DNS 查找失败引起的。谢谢!
标签: python linux active-directory single-sign-on kerberos