首页 > 解决方案 > 使用 FlaskLDAP3Login 进行单点登录时是否仍需要表单/登录?

问题描述

简单地说,我正在使用 Flask 开发一个应用程序。对于这个应用程序,我正在尝试实现单点登录,因此用户永远不需要输入凭据,例如usernamepassword

这种情况下的身份验证和授权将与 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

另外,我找不到类似甚至相关的线程,例如

标签: pythonflaskldapsingle-sign-on

解决方案


推荐阅读