首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超集键斗篷配置

超集键斗篷配置
EN

Stack Overflow用户
提问于 2020-02-05 16:27:11
回答 2查看 1.4K关注 0票数 1

我正在尝试使用带有apache超级集的密钥披风。我花了几个小时在下面的链接,但无法取代目前的登录。

  1. Using OpenID/Keycloak with Superset 2.Using KeyCloak(OpenID Connect) with Apache SuperSet
  2. Using OpenID/Keycloak with Superset

我使用的是apache超级集0.34.5。而上面的链接使用0.28及以下。

我在第一步感到困惑。让我解释一下步骤,看看我错过了什么。

我用pip安装了超级集。

我的结构是,我的config.py和security.py在同一个级别(我没有安全文件夹)

我将安全性重命名为oid_security。

我创建了一个具有以下内容的security.py。

代码语言:javascript
复制
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)

然后,我使用以下内容创建了自定义管理器

代码语言:javascript
复制
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。我编辑了配置文件如下所示。

代码语言:javascript
复制
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

这里要提到的一件事是在中的安全文件夹中有一个管理器py,它有抽象的安全管理器cls。我得到了一个错误安全性py

它说不能从超级安全系统中导入名称SupersetSecurityManager?

EN

回答 2

Stack Overflow用户

发布于 2020-02-10 13:20:51

我建议你重新开始,遵循对我有用的步骤:

  1. 在您的超集目录中创建一个虚拟环境并激活它。
  2. 在您的虚拟环境中安装烧瓶-oidc超集插件。安装flask-oidc
  3. Have一个oidc_security.py文件,上面粘贴的脚本是设置中的security.py。
  4. 有一个client_secret.json文件和您的密钥披风配置。
  5. 有一个superset_config.py和上面粘贴的脚本。
  6. 将所有这三个文件添加到您的pythonpath.
  7. Run 超级集db Update&E 130超集inite 231 commands.
  8. Finally,中。执行超集,运行。初始化完成后,导航到浏览器上的http://localhost:8088。预期行为:您将被重定向到keycloak登录/注册。成功登录后,您将被重定向到superset应用程序.

我希望这能帮到你。如果你成功或面临错误,一定要回发。

票数 0
EN

Stack Overflow用户

发布于 2020-02-21 08:48:08

然后,我使用以下内容创建了自定义管理器

在哪里更新??

从flask_appbuilder.security.manager导入AUTH_OID,从flask_appbuilder.security.sqla.manager导入SecurityManager,从flask_oidc导入OpenIDConnect类OIDCSecurityManager(SecurityManager):

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60080086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档