我正在尝试将clocloak与apache超集一起使用。我已经在下面的链接上花费了几个小时,但无法替换当前的登录名。
我正在使用Apache Superset 0.34.5。而上面的链接使用0.28及更低版本。
我对初始步骤感到困惑。让我解释一下步骤,看看我缺少什么。
我使用pip安装超集。
我的结构是,我具有config.py和security.py处于同一级别(我没有安全文件夹)
我将安全性重命名为oid_security。
我创建了具有以下内容的security.py。
from flask_appbuilder.security.manager import AUTH_OID
from superset.security import SupersetSecurityManager
from flask_oidc import OpenIDConnect
from flask_appbuilder.security.views import AuthOIDView
from flask_login import login_user
from urllib.parse import quote
from flask_appbuilder.views import ModelView, SimpleFormView, expose
import logging
class AuthOIDCView(AuthOIDView):
@expose('/login/', methods=['GET', 'POST'])
def login(self, flag=True):
sm = self.appbuilder.sm
oidc = sm.oid
@self.appbuilder.sm.oid.require_login
def handle_login():
user = sm.auth_user_oid(oidc.user_getfield('email'))
if user is None:
info = oidc.user_getinfo(['preferred_username', 'given_name', 'family_name', 'email'])
user = sm.add_user(info.get('preferred_username'), info.get('given_name'), info.get('family_name'), info.get('email'), sm.find_role('Gamma'))
login_user(user, remember=False)
return redirect(self.appbuilder.get_url_for_index)
return handle_login()
@expose('/logout/', methods=['GET', 'POST'])
def logout(self):
oidc = self.appbuilder.sm.oid
oidc.logout()
super(AuthOIDCView, self).logout()
redirect_url = request.url_root.strip('/') + self.appbuilder.get_url_for_login
return redirect(oidc.client_secrets.get('issuer') + '/protocol/openid-connect/logout?redirect_uri=' + quote(redirect_url))
class OIDCSecurityManager(SupersetSecurityManager):
authoidview = AuthOIDCView
def __init__(self,appbuilder):
super(OIDCSecurityManager, self).__init__(appbuilder)
if self.auth_type == AUTH_OID:
self.oid = OpenIDConnect(self.appbuilder.get_app)
然后我用以下
创建了自定义管理器from flask_appbuilder.security.manager import AUTH_OID
from flask_appbuilder.security.sqla.manager import SecurityManager
from flask_oidc import OpenIDConnect
class OIDCSecurityManager(SecurityManager):
def __init__(self, appbuilder):
super(OIDCSecurityManager, self).__init__(appbuilder)
if self.auth_type == AUTH_OID:
self.oid = OpenIDConnect(self.appbuilder.get_app)
self.authoidview = AuthOIDCView
我用我的凭据创建了客户端secret.json。 我如下编辑配置文件。
from superset.security import OIDCSecurityManager
AUTH_TYPE = AUTH_OID
OIDC_CLIENT_SECRETS = 'client_secret.json'
OIDC_ID_TOKEN_COOKIE_SECURE = False
OIDC_REQUIRE_VERIFIED_EMAIL = False
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = 'Gamma'
CUSTOM_SECURITY_MANAGER = OIDCSecurityManager
这里要提到的一件事是在flask appbuilder的安全文件夹中有管理器py,该文件夹具有Abstract Security Manager cls。我收到一个错误安全py
说无法从超集导入名称SupersetSecurityManager-安全 有人吗?
答案 0 :(得分:0)
我建议您重新开始,并按照对我有用的步骤进行操作:
我希望这会有所帮助。如果成功或遇到错误,请回发。
答案 1 :(得分:0)
然后我用以下内容创建了自定义管理器
在哪里更新?
从flask_appbuilder.security.manager导入AUTH_OID 从flask_appbuilder.security.sqla.manager导入SecurityManager 从flask_oidc导入OpenIDConnect OIDCSecurityManager(SecurityManager)类:
def __init__(self, appbuilder):
super(OIDCSecurityManager, self).__init__(appbuilder)
if self.auth_type == AUTH_OID:
self.oid = OpenIDConnect(self.appbuilder.get_app)
self.authoidview = AuthOIDCView