gpt4 book ai didi

python - REMOTE_USER 身份验证类型在 apache 超集中如何工作?

转载 作者:行者123 更新时间:2023-12-04 17:47:05 33 4
gpt4 key购买 nike

我一直在尝试使用我的 Login Rest API 而不是其他类型进行身份验证。如何实现这一目标? REMOTE_USER 身份验证是正确的方法吗?如果是这样,我可以获得有关此的示例代码或文档吗?

阅读文档 here但无法理解,因为我是flask-appbuilder和python的新手。

最佳答案

只是为了下一个到达这里的人。

按照此处的说明进行操作:https://superset.incubator.apache.org/installation.html#middleware

但不起作用:太多重定向。

这里的 Flask App-Builder 代码:
https://github.com/dpgaspar/Flask-AppBuilder/blob/167c13ec6dda6e7d8286e590233cd603a7d13928/flask_appbuilder/security/views.py#L728

终于做了我自己的自定义远程登录(下面的草稿版本)。

# Apache superset REMOTE_USER authentication
# https://superset.incubator.apache.org/installation.html#middleware
from flask_appbuilder.security.manager import AUTH_REMOTE_USER

# Define AUTH_TYPE
# AUTH_TYPE = AUTH_REMOTE_USER

# Allow users to auto register and be assigned to Remote role
# AUTH_USER_REGISTRATION = True
# AUTH_USER_REGISTRATION_ROLE = "Remote"

# For testing without a proxy just calling http://localhost:9000/superset/welcome?logme=user1
from flask import request, g
from flask_login import login_user, logout_user
import logging


# Middleware to extract user from header HTTP_X_PROXY_REMOTE_USER
# and place it at REMOTE_USER
class RemoteUserLogin(object):

def __init__(self, app):
self.app = app

def log_user(self, environ):
from superset import security_manager as sm

username = self.get_username(environ)
logging.info("REMOTE_USER Checking logged user")
if hasattr(g, "user") and \
hasattr(g.user, "username"):
if g.user.username == username:
logging.info("REMOTE_USER user already logged")
return g.user
else:
logout_user()

user = sm.find_user(username=username)
logging.info("REMOTE_USER Look up user: %s", user)
if user:
logging.info("REMOTE_USER Login_user: %s", user)
login_user(user)
return user

def get_username(self, environ):
user = environ.pop('HTTP_X_PROXY_REMOTE_USER', None)

if not user and self.app.debug:
# Dev hack
user = environ.get("werkzeug.request").args.get("logme")
if user:
logging.error("Logging user from request. Remove me ASAP!!!: %s", user)

environ['REMOTE_USER'] = user
return user

def before_request(self):
user = self.log_user(request.environ)
if not user:
raise Exception("Invalid login or user not found")


from superset.app import SupersetAppInitializer
def app_init(app):
logging.info("Resgistering RemoteUserLogin")
app.before_request(RemoteUserLogin(app).before_request)
return SupersetAppInitializer(app)

APP_INITIALIZER = app_init

关于python - REMOTE_USER 身份验证类型在 apache 超集中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47990985/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com