【发布时间】:2014-07-18 10:03:56
【问题描述】:
我有一个在 Flask 中构建的网站,只有在 Active Directory 中才能访问该网站。我想将该范围限制为组成员身份,但我不知道该怎么做。
到目前为止,这是我的代码:
@app.route('/login', methods=["GET", "POST"])
def login():
session.permanent = True
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('main'))
if request.method == 'POST':
login = LoginValidator(username=request.form.get('username'),
password=request.form.get('password'))
if login.is_valid:
login_user(login.lookup_user, remember=False)
string = 'You have logged in as '+ g.user.username
flash(string, 'success')
return redirect(url_for('main'))
else:
username=request.form.get('username')
password=request.form.get('password')
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)
sess = ldap.initialize('LDAP_SERVER')
sess.set_option(ldap.OPT_REFERRALS, 0) # referrals = 0
sess.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
try:
sess.bind_s("%s@example.net" % username, password)
numuser = len(User.query.all())
hash = sha256_crypt.encrypt(password)
u = User(id=numuser+1,
username=username,
password=hash,
role="ROLE_USER")
db.session.add(u)
db.session.commit()
flash('User added to the database, please login again', 'info')
except:
flash('Incorrect Login/Password', 'danger')
return render_template('login.html')
这样做是检查用户名和密码是否在数据库中,如果不在,则尝试使用指定的用户名和密码绑定到 LDAP 服务器。如果绑定成功,则对密码进行哈希处理并将用户名和哈希密码添加到数据库中。
此解决方案的问题在于 Active Directory 中的任何人都可以访问该网站。怎么可能只允许某个组的成员访问?
【问题讨论】:
标签: flask active-directory ldap active-directory-group