基于组成员身份使用 Flask-LDAP3-Login 进行身份验证
Authenticate with Flask-LDAP3-Login based on group membership
我是 Flask 新手,正在尝试 Flask-LDAP3-Login。
我已经按照此处的文档进行操作,并且运行良好:https://flask-ldap3-login.readthedocs.io/en/latest/index.html
我将如何根据用户是否是特定组的成员来对用户进行身份验证?我看到文档提到组过滤,但我不确定如何将它们放在一起。
你有 ldap 服务器吗?如果没有,请转到 https://www.openldap.org/ 并按照有关如何安装 openldap 服务器的说明进行操作
如果您更喜欢 docker 容器,请到这里
https://github.com/osixia/docker-openldap 并按照步骤启动容器并 运行
然后去这里 https://ldap3.readthedocs.io/tutorial.html
在有你的 python env 或另一个 python 容器(与你的 ldap 容器相同的桥接网络)的机器上 pip install ldap3
打开 python 控制台并输入以下命令
>>> from ldap3 import Server, Connection, ALL
>>> server = Server('ipa.demo1.freeipa.org')
>>> conn = Connection(server)
>>> conn.bind()
True
首先使用这个免费的 ldap 服务器 ipa。demo1.freeipa.org
然后使用您自己的 ldap 服务器 ip 地址
如果有人好奇,我自己解决了这个问题:
首先,我使用此处的步骤将 flask-ldap3-login 与 Flask-SQLAlchemy 集成 - https://github.com/nickw444/flask-ldap3-login/issues/26
我的保存用户方法现在看起来像这样:
@ldap_manager.save_user
def save_user(dn, username, data, memberships):
id=int(data.get("uidNumber"))
if 'group-goes-here' in data.get("memberOf"):
user=User.query.filter_by(id=id).first()
if not user:
user=User(
id=int(id),
dn=dn,
username=username,
email=data['mail'],
firstname=data['givenName'],
lastname=data['sn']
)
db.session.add(user)
db.session.commit()
return user
所以基本上只要用户输入有效的 LDAP 凭据,它就会去 AD 检索他们的组成员身份,它是一个简单的 if 'group-goes-here' in data.get("memberOf"): 确定是否将用户保存在我的用户模型中,然后 return 将其返回给处理程序。
@auth.route('/login', methods=['GET', 'POST'])
def login():
# Redirect users who are not logged in.
form = LDAPLoginForm()
if form.validate_on_submit():
if form.user:
login_user(form.user)
else:
flash('Login Failed', 'warning')
return redirect(url_for('auth.login'))
return redirect(url_for('main.home'))
希望对您有所帮助!
我是 Flask 新手,正在尝试 Flask-LDAP3-Login。
我已经按照此处的文档进行操作,并且运行良好:https://flask-ldap3-login.readthedocs.io/en/latest/index.html
我将如何根据用户是否是特定组的成员来对用户进行身份验证?我看到文档提到组过滤,但我不确定如何将它们放在一起。
你有 ldap 服务器吗?如果没有,请转到 https://www.openldap.org/ 并按照有关如何安装 openldap 服务器的说明进行操作 如果您更喜欢 docker 容器,请到这里 https://github.com/osixia/docker-openldap 并按照步骤启动容器并 运行 然后去这里 https://ldap3.readthedocs.io/tutorial.html
在有你的 python env 或另一个 python 容器(与你的 ldap 容器相同的桥接网络)的机器上 pip install ldap3
打开 python 控制台并输入以下命令
>>> from ldap3 import Server, Connection, ALL
>>> server = Server('ipa.demo1.freeipa.org')
>>> conn = Connection(server)
>>> conn.bind()
True
首先使用这个免费的 ldap 服务器 ipa。demo1.freeipa.org 然后使用您自己的 ldap 服务器 ip 地址
如果有人好奇,我自己解决了这个问题:
首先,我使用此处的步骤将 flask-ldap3-login 与 Flask-SQLAlchemy 集成 - https://github.com/nickw444/flask-ldap3-login/issues/26
我的保存用户方法现在看起来像这样:
@ldap_manager.save_user
def save_user(dn, username, data, memberships):
id=int(data.get("uidNumber"))
if 'group-goes-here' in data.get("memberOf"):
user=User.query.filter_by(id=id).first()
if not user:
user=User(
id=int(id),
dn=dn,
username=username,
email=data['mail'],
firstname=data['givenName'],
lastname=data['sn']
)
db.session.add(user)
db.session.commit()
return user
所以基本上只要用户输入有效的 LDAP 凭据,它就会去 AD 检索他们的组成员身份,它是一个简单的 if 'group-goes-here' in data.get("memberOf"): 确定是否将用户保存在我的用户模型中,然后 return 将其返回给处理程序。
@auth.route('/login', methods=['GET', 'POST'])
def login():
# Redirect users who are not logged in.
form = LDAPLoginForm()
if form.validate_on_submit():
if form.user:
login_user(form.user)
else:
flash('Login Failed', 'warning')
return redirect(url_for('auth.login'))
return redirect(url_for('main.home'))
希望对您有所帮助!