我正在为在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
),并将密钥表导出到Flask服务器。我可以使用kinit -k HTTP/flaskserver.mydomain.local
在Flask服务器上获得票证授予票证。我还可以使用kerberos
库验证Python中的密码:
import kerberos
kerberos.checkPassword('username', 'password', 'HTTP/flaskserver.mydomain.local', 'MYDOMAIN.LOCAL'
这可以正确地运行并且几乎立即。
导致kerberos.authGSSServerInit
延迟的原因是什么?我该如何调试?
答案 0 :(得分:3)
延迟是由主机名的反向DNS查找失败引起的。 host flaskserver
正确返回了IP,但host <ip-of-flaskserver>
返回了Host <ip-of-flaskserver>.in-addr.arpa not found: 2(SERVFAIL)
。
如https://web.mit.edu/kerberos/krb5-1.13/doc/admin/princ_dns.html所述,禁用krb5.conf
中的反向DNS查找解决了问题:
[libdefaults]
rdns = false