微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与 Okta 集成的 Apache 超集

如何解决与 Okta 集成的 Apache 超集

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'
         }
    }
]

enter image description here

解决方法

从 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 表记录。如果没有匹配的记录,则登录将失败。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。