网络应用程序显然混淆了身份验证凭据

时间:2016-01-08 12:42:51

标签: python authentication flask gunicorn

我构建了这个内部网络应用程序(基于Flask并与Gunicorn一起提供),并且多年来它从未存储过任何类型的用户数据或会话数据,并且工作正常。现在我添加了一个身份验证页面,使用我的组织的LDAP - 用户输入用户名和密码(他们用来登录他们的机器),app验证LDAP服务器上的凭据,并让用户通过,如果一切都匹配。

当我只使用一个进程(gunicorn -w 1)提供应用程序时,它可以正常工作。但是,当我使用多个进程为应用程序提供服务时,我会遇到不稳定即使用户名和密码正确,有时身份验证也会失败。有时,如果一个用户进行身份验证,则其他用户将被视为已验证有时用户会对应用进行身份验证并使用该应用程序一段时间,然后点击某些内容并重定向到登录页面(所有功能都经过修饰以检查用户是否经过身份验证)。

我的猜测是,我未能正确隔离用户 - 用户X输入正确的用户名和密码,但点击次数"提交"该应用程序认为用户Y未经过身份验证,因此拒绝访问(此处为身份验证的逻辑:我检查flask.session是否具有密钥{{1}如果有,用户通过;如果没有,用户被重定向到登录页面,如果验证成功,我将用户名存储在user)。

我该如何调试?如果我的猜测是正确的,那么我该如何确保用户'凭证不会混淆?

1 个答案:

答案 0 :(得分:0)

我注意到os.urandom(24)对象没有持续存在(它没有明显的原因而一直空着)。我用Google搜索了answer。原来我的应用程序的密钥不应该是随机的(它是!( letter == 'Q' || letter == 'q' ) <=> ( letter != 'Q' && letter != 'q' ) ),它应该是一个常量字符串。一旦我修复了身份验证工作正常。