Flask-LDAP3-Login - Как пройти аутентификацию на основе членства в группе - PullRequest
0 голосов
/ 16 ноября 2018

Я новичок в Flask и пробую Flask-LDAP3-Login.

Я следил за документацией здесь, и она у меня работает, и это здорово:

https://flask -ldap3-login.readthedocs.io / ен / последний / index.html

Как мне пройти аутентификацию пользователя, основываясь на том, является ли он членом определенной группы? Я вижу, что документы упоминают групповую фильтрацию, но я не уверен, как все это собрать вместе.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Если кому-то интересно, я решил это сам, выполнив следующее:

Во-первых, я интегрировал 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 для получения членства в группах, и это просто, если «group-go-here» в data.get («memberOf»): определяет, сохранять ли пользователя в Моя модель пользователя и верните ее обратно обработчику.

@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'))

Надеюсь, это поможет!

0 голосов
/ 16 ноября 2018

У вас есть сервер ldap? если нет, перейдите на https://www.openldap.org/ и следуйте инструкциям по установке сервера openldap. если вы предпочитаете докер-контейнер, тогда иди сюда https://github.com/osixia/docker-openldap и следуйте инструкциям, чтобы запустить и запустить контейнер тогда иди сюда https://ldap3.readthedocs.io/tutorial.html

pip install ldap3 на машине с вашей средой python или другим контейнером python (той же мостовой сетью, что и ваш контейнер ldap)

Откройте консоль Python и введите следующие команды

>>> from ldap3 import Server, Connection, ALL
>>> server = Server('ipa.demo1.freeipa.org')
>>> conn = Connection(server)
>>> conn.bind()
True 

сначала с этого бесплатного сервера ldap ipa.demo1.freeipa.org а затем с вашим собственным IP-адресом сервера ldap

...