Flask登录和LDAP

2024-09-29 00:12:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个以flask框架为后端的webapp,我需要提供身份验证。

由于这是一个内部应用程序,将用于我们的本地域,我已选择验证用户与他们已经存在的域凭据。

我使用的方法是pywin32中的win32security.LogonUser,它在成功登录时返回一个句柄。

我试图理解flask登录的工作原理,但是@login_manager.user_loader回调让我感到困惑。

它说我应该提供一个可以用来重新加载用户的id,但是我没有数据库或持久存储来提供这个映射,因为我只关心检查用户是否通过身份验证。

我的用户类如下所示:

class User(flask_login.UserMixin):
    def __init__(self,username):
        self.username = username
        self.id = ??? 

如何使用id,以及如何将此id映射回此实例?


Tags: 方法用户self框架身份验证id应用程序flask
3条回答

可以在python中使用LDAP模块完成此操作:

LDAP_SERVER = "yourldapserver"
LDAP_PORT = 390033 # your port
import ldap
def login(email, password):
    ld = ldap.open(LDAP_SERVER, port=LDAP_PORT)
    try:
        ld.simple_bind_s(email, password)
    except ldap.INVALID_CREDENTIALS:
        return False
    return True

self.id应该是唯一的字符串。 它可以是:

  • cn(LDAP中唯一)
  • sAMAccountName(在域中是唯一的,它就像一个unix登录名)
  • 邮件(多值,其中一个应该/可以是唯一的)
  • 。。。

只要选一个,而且要明智。我更喜欢用sAMAcountName来做我自己的工作。 它要求您在ldap绑定后执行LDAPSearch。

应与应用程序用户进行第一次未经身份验证的绑定(以查找DN),以避免信息泄漏(以防被黑客攻击)。

Ldap连接是资源=>;使用上下文管理器

with ldap.open(LDAP_SERVER, port=LDAP_PORT) as ld:
    # do the search/bind/search here

Flask登录不依赖或不需要用户的任何特定后端。你必须表示用户对象并返回一个id

flask-login: can't understand how it works

相关问题 更多 >