python - 使用 FlaskLDAP3Login 进行单点登录时是否仍需要表单/登录?
问题描述
简单地说,我正在使用 Flask 开发一个应用程序。对于这个应用程序,我正在尝试实现单点登录,因此用户永远不需要输入凭据,例如username和password。
这种情况下的身份验证和授权将与 LDAPS 一起通过 Kerberos。Kerberos 部分尚未完成,但是,Kerberos 旨在在请求应用程序链接时通过当前登录到系统 (Windows) 的中间件获取“用户名”。之后这个变量,即“用户名”将与 LDAPS 一起进行,以检查用户是否属于 Active Directory。如果是 - 提供对网站的访问和许可,如果不是 - 禁止。
但是,由于我的用户不会输入任何内容,我不明白我是否需要使用 Flask Form (flask-wtf) 或 Flask Login (flask-login eg UserMixin
),以及我应该如何为我的用户提供访问权限?
我能够设置 FlaskLDAP3Login 'config.py'
然后运行'__init__.py'
from flask import Flask
from config import Config
from flask_login import LoginManager
from flask_ldap3_login import LDAP3LoginManager
app = Flask(__name__)
app.config.from_object(Config)
login_manager = LoginManager(app) # Setup a Flask-Login Manager
ldap_manager = LDAP3LoginManager(app) # Setup a LDAP3 Login Manager
from app import routes
比我得到以下异常:
例外:缺少 user_loader 或 request_loader。有关更多信息,请参阅 http://flask-login.readthedocs.io/#how-it-works。
比我找到这个答案,但使用这个装饰器@login_manager.user_loader
可能还不够,不是吗?
我的假设是创建一个装饰器,类似于这个允许/禁止访问用户的装饰器:
import getpass
from flask import Flask, request, make_response
from functools import wraps
def auth_required(f):
@wraps(f)
def decorated(*args, **kwargs):
current_user = getpass.getuser() # current_user will be later acquired via Kerberos
auth = ldap_manager.get_user_info_for_username(current_user)
if auth:
return f(*args, **kwargs)
return make_response('Could not verify your login!', 401, {'WWW-Authenticate': 'Basic realm="You are not our user!"'})
return decorated
另外,我找不到类似甚至相关的线程,例如