【问题标题】:Apache superset with Okta integration具有 Okta 集成的 Apache 超集
【发布时间】:2021-04-13 13:46:37
【问题描述】:

https://github.com/apache/superset/issues/13948

我正在使用 Apache Superset 配置 Okta,但它在使用消息“无效登录”进行身份验证后将我重定向到登录页面。请再试一次。'

以下是我的superset_config.py 文件:

AUTH_TYPE = AUTH_OAUTH
OAUTH_PROVIDERS = [
    {
         'name': 'okta', 'icon': 'fa-circle-o',
         'token_key': 'access_token',
         'remote_app': {
             'client_id': '0oa8hoe9t1c8LfB1z357',
             'client_secret': 'b8exxJID0BQOXlvMlQa5To5frU4EY7FX3cXDOMLM',
             'api_base_url': 'https://dev-514411.okta.com/oauth2/v1/',
             'client_kwargs': {
                 'scope': 'openid profile email groups'
             },
             'access_token_url': 'https://dev-514411.okta.com/oauth2/v1/token',
             'authorize_url': 'https://dev-514411.okta.com/oauth2/v1/authorize'
         }
    }
]

【问题讨论】:

  • 我希望你的 client_secret 要么是假的,要么已经改变了......(好吧,它只是开发人员,但仍然:密切关注它)
  • 我认为这可能与您的 okta 设置有关。分享它们可以更容易地重现和回答您的问题。

标签: authentication single-sign-on okta apache-superset superset


【解决方案1】:

从 Flask-AppBuilder 3.2.2 开始,Okta 集成应该可以开箱即用,但事实并非如此。

这对我有用:

在 Okta 的应用设置中,Sign-in redirect URIs 字段应如下所示:

http://localhost:8088/oauth-authorized/okta

您的superset_config.py 应包含类似以下内容:

OKTA_BASE_URL = 'https://dev-<your-okta-id>.okta.com'

AUTH_TYPE = AUTH_OAUTH
OAUTH_PROVIDERS = [
    {
        'name': 'okta',
        'token_key': 'access_token',
        'icon': 'fa-circle-o',
        'remote_app': {
            'client_id': OKTA_CLIENT_ID,
            'client_secret': OKTA_CLIENT_SECRET,
            'client_kwargs': {
                'scope': 'openid profile email groups'
            },
            'access_token_method': 'POST',
            'api_base_url': f'{OKTA_BASE_URL}/oauth2/v1/',
            'access_token_url': f'{OKTA_BASE_URL}/oauth2/v1/token',
            'authorize_url': f'{OKTA_BASE_URL}/oauth2/v1/authorize',
            'server_metadata_url': f'{OKTA_BASE_URL}/.well-known/openid-configuration',
        },
    }
]


from custom_sso_security_manager import CustomSsoSecurityManager
CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager

最后,您的custom_sso_security_manager.py 必须与您的superset_config.py 位于同一目录中,应包含以下内容:

from superset.security import SupersetSecurityManager


class CustomSsoSecurityManager(SupersetSecurityManager):

    def oauth_user_info(self, provider, response=None):

        if provider == 'okta':
            user_info = self.appbuilder.sm.oauth_remotes[provider].parse_id_token(
                response)

            return {
                'name': user_info['name'],
                'email': user_info['email'],
                'id': user_info['email'],
                'username': user_info['email']
            }

对象oauth_user_info 返回的重要属性是emailusername,它们将用于匹配数据库的ab_user 表记录。如果没有匹配的记录,则登录将失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2021-11-16
    • 2016-03-21
    相关资源
    最近更新 更多