You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by "devikaaaa33 (via GitHub)" <gi...@apache.org> on 2025/07/23 12:59:18 UTC

[D] How to authenticate with Superset with service account [superset]

GitHub user devikaaaa33 created a discussion: How to authenticate with Superset with service account

Hi Team,

We were previously using Superset default credentials to obtain the access token and CSRF token for asset imports. Now, instead of the default credentials, we have created a service account in Zitadel, which has generated a token.
Which endpoints should we use, and how should we authenticate with Superset to perform asset imports using this token?

these were the endpoint I was using before.

curl -s -k --request POST --url "https://$APP_PREFIX.$DOMAIN/api/v1/security/login" 

curl -k -s -c cookies.txt --request GET \
      --url "https://$APP_PREFIX.$DOMAIN/api/v1/security/csrf_token/"



GitHub link: https://github.com/apache/superset/discussions/34278

----
This is an automatically sent email for notifications@superset.apache.org.
To unsubscribe, please send an email to: notifications-unsubscribe@superset.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [D] How to authenticate with Superset with service account [superset]

Posted by "dosubot[bot] (via GitHub)" <gi...@apache.org>.
GitHub user dosubot[bot] added a comment to the discussion: How to authenticate with Superset with service account

<!-- Answer -->
Superset doesn't natively support authenticating API requests with external OIDC/JWT tokens like those from Zitadel. To enable this, you'll need to implement a custom SecurityManager and possibly middleware. Here’s a high-level outline of what you need to do:

1. **Create a custom SecurityManager** that extracts and validates the Bearer token from the Authorization header, verifies it using Zitadel's public keys, and maps it to a Superset user. You can do this by subclassing `SupersetSecurityManager` and overriding methods like `request_loader` or `is_user_authenticated`. See [this discussion for a similar approach](https://github.com/apache/superset/discussions/33131).

   Example (simplified for illustration):
   ```python
   # custom_security_manager.py
   from superset.security import SupersetSecurityManager
   from flask import request
   import jwt  # Use python-jose or PyJWT for JWT validation

   class CustomSecurityManager(SupersetSecurityManager):
       def request_loader(self, request):
           auth_header = request.headers.get("Authorization")
           if auth_header and auth_header.startswith("Bearer "):
               token = auth_header.split(" ", 1)[1]
               # Validate the JWT using Zitadel's public keys
               try:
                   payload = jwt.decode(token, zitadel_public_key, algorithms=["RS256"], audience="your-audience")
                   user = self.find_user(username=payload["preferred_username"])
                   return user
               except Exception:
                   return None
           return None
   ```

2. **Configure Superset to use your custom SecurityManager** by setting `CUSTOM_SECURITY_MANAGER = CustomSecurityManager` in your `superset_config.py` file. If you need to preprocess headers or environment variables, you can also add custom middleware via the `ADDITIONAL_MIDDLEWARE` config option. See [middleware example](https://github.com/apache/superset/discussions/33131).

3. **Apply your changes**: Place your custom SecurityManager code in a Python file accessible to Superset (e.g., in your project directory), and update `superset_config.py` to import and use it.

There are no official plugins for Zitadel or generic OIDC/JWT API authentication in Superset, so this custom approach is required. For more details and community examples, see [this discussion](https://github.com/apache/superset/discussions/32038) and the [SupersetSecurityManager code](https://github.com/apache/superset/blob/829e4d92d91ceae4b43b1ed3b063ffe45377799c/superset/security/manager.py).


<!-- Dosu Comment Footer -->
*To reply, just mention [@dosu](https://go.dosu.dev/dosubot).*

---
<sup>How did I do? [Good](https://app.dosu.dev/response-feedback/4576260d-f1be-4170-bdc3-1bd69099ce51?feedback_type=great_response) | [Irrelevant](https://app.dosu.dev/response-feedback/4576260d-f1be-4170-bdc3-1bd69099ce51?feedback_type=irrelevant_answer) | [Incorrect](https://app.dosu.dev/response-feedback/4576260d-f1be-4170-bdc3-1bd69099ce51?feedback_type=incorrect_sources) | [Verbose](https://app.dosu.dev/response-feedback/4576260d-f1be-4170-bdc3-1bd69099ce51?feedback_type=too_verbose) | [Hallucination](https://app.dosu.dev/response-feedback/4576260d-f1be-4170-bdc3-1bd69099ce51?feedback_type=hallucination) | [Report 🐛](https://app.dosu.dev/response-feedback/4576260d-f1be-4170-bdc3-1bd69099ce51?feedback_type=bug_report) | [Other](https://app.dosu.dev/response-feedback/4576260d-f1be-4170-bdc3-1bd69099ce51?feedback_type=other)</sup>&nbsp;&nbsp;[![Join Discord](https://img.shields.io/badge/join-5865F2?logo=discord&logoColor=white&label=)](https://go.dosu.dev/discord-bot)&nbsp;[![Sh
 are on X](https://img.shields.io/badge/X-share-black)](https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/apache/superset/discussions/34278)

GitHub link: https://github.com/apache/superset/discussions/34278#discussioncomment-13863861

----
This is an automatically sent email for notifications@superset.apache.org.
To unsubscribe, please send an email to: notifications-unsubscribe@superset.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [D] How to authenticate with Superset with service account [superset]

Posted by "dosubot[bot] (via GitHub)" <gi...@apache.org>.
GitHub user dosubot[bot] added a comment to the discussion: How to authenticate with Superset with service account

<!-- Answer -->
Superset's API does not natively support authenticating with arbitrary external JWT/OIDC tokens (like those issued by Zitadel) for standard API operations such as asset imports. The default and supported approach is still to use session-based authentication: POST to `/api/v1/security/login` with the service account's username and password to obtain a session cookie, then use that cookie to GET `/api/v1/security/csrf_token/` for the CSRF token—just as you did with the default credentials.

If you want to use a Zitadel-issued token directly (for example, as a Bearer token in the Authorization header), Superset would need to be custom-configured with a custom SecurityManager and possibly middleware to validate and accept those tokens. This is an advanced setup and not part of the standard Superset configuration or documentation. There are community discussions and code examples about implementing such custom authentication flows if you want to explore that route further ([example discussion](https://github.com/apache/superset/discussions/33131)).

Unless you have already customized Superset to accept Zitadel tokens, the recommended and supported workflow is to use the service account's username/password with the login endpoint, then proceed as before for asset imports. If you do implement a custom authentication flow, ensure your token is accepted by Superset's authentication system—otherwise, requests to the CSRF endpoint will fail with an authentication error ([reference](https://github.com/apache/superset/issues/32257)).


<!-- Dosu Comment Footer -->
*To reply, just mention [@dosu](https://go.dosu.dev/dosubot).*

---
<sup>How did I do? [Good](https://app.dosu.dev/response-feedback/5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8?feedback_type=great_response) | [Irrelevant](https://app.dosu.dev/response-feedback/5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8?feedback_type=irrelevant_answer) | [Incorrect](https://app.dosu.dev/response-feedback/5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8?feedback_type=incorrect_sources) | [Verbose](https://app.dosu.dev/response-feedback/5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8?feedback_type=too_verbose) | [Hallucination](https://app.dosu.dev/response-feedback/5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8?feedback_type=hallucination) | [Report 🐛](https://app.dosu.dev/response-feedback/5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8?feedback_type=bug_report) | [Other](https://app.dosu.dev/response-feedback/5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8?feedback_type=other)</sup>&nbsp;&nbsp;[![Join Discord](https://img.shields.io/badge/join-5865F2?logo=discord&logoColor=white&label=)](https://go.dosu.dev/discord-bot)&nbsp;[![Sh
 are on X](https://img.shields.io/badge/X-share-black)](https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/apache/superset/discussions/34278)

GitHub link: https://github.com/apache/superset/discussions/34278#discussioncomment-13863472

----
This is an automatically sent email for notifications@superset.apache.org.
To unsubscribe, please send an email to: notifications-unsubscribe@superset.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [D] How to authenticate Superset with service account [superset]

Posted by "devikaaaa33 (via GitHub)" <gi...@apache.org>.
GitHub user devikaaaa33 edited a discussion: How to authenticate Superset with service account

Hi Team,

We were previously using Superset default credentials to obtain the access token and CSRF token for asset imports. Now, instead of the default credentials, we have created a service account in Zitadel, which has generated a token.
Which endpoints should we use, and how should we authenticate with Superset to perform asset imports using this token?

these were the endpoint I was using before.

curl -s -k --request POST --url "https://$APP_PREFIX.$DOMAIN/api/v1/security/login" 

curl -k -s -c cookies.txt --request GET \
      --url "https://$APP_PREFIX.$DOMAIN/api/v1/security/csrf_token/"



GitHub link: https://github.com/apache/superset/discussions/34278

----
This is an automatically sent email for notifications@superset.apache.org.
To unsubscribe, please send an email to: notifications-unsubscribe@superset.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [D] How to authenticate with Superset with service account [superset]

Posted by "devikaaaa33 (via GitHub)" <gi...@apache.org>.
GitHub user devikaaaa33 added a comment to the discussion: How to authenticate with Superset with service account

Hi [@dosu](https://go.dosu.dev/dosubot), Could you please provide a sample code for authenticating with a Zitadel-issued token? What changes need to be made, and where should they be applied in the Superset application?

GitHub link: https://github.com/apache/superset/discussions/34278#discussioncomment-13863830

----
This is an automatically sent email for notifications@superset.apache.org.
To unsubscribe, please send an email to: notifications-unsubscribe@superset.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [D] How to authenticate Superset with service account [superset]

Posted by "dosubot[bot] (via GitHub)" <gi...@apache.org>.
GitHub user dosubot[bot] edited a comment on the discussion: How to authenticate Superset with service account

<!-- Answer -->
Superset doesn't natively support authenticating API requests with external OIDC/JWT tokens like those from Zitadel. To enable this, you'll need to implement a custom SecurityManager and possibly middleware. Here’s a high-level outline of what you need to do:

1. **Create a custom SecurityManager** that extracts and validates the Bearer token from the Authorization header, verifies it using Zitadel's public keys, and maps it to a Superset user. You can do this by subclassing `SupersetSecurityManager` and overriding methods like `request_loader` or `is_user_authenticated`. See [this discussion for a similar approach](https://github.com/apache/superset/discussions/33131).

   Example (simplified for illustration):
   ```python
   # custom_security_manager.py
   from superset.security import SupersetSecurityManager
   from flask import request
   import jwt  # Use python-jose or PyJWT for JWT validation

   class CustomSecurityManager(SupersetSecurityManager):
       def request_loader(self, request):
           auth_header = request.headers.get("Authorization")
           if auth_header and auth_header.startswith("Bearer "):
               token = auth_header.split(" ", 1)[1]
               # Validate the JWT using Zitadel's public keys
               try:
                   payload = jwt.decode(token, zitadel_public_key, algorithms=["RS256"], audience="your-audience")
                   user = self.find_user(username=payload["preferred_username"])
                   return user
               except Exception:
                   return None
           return None
   ```

2. **Configure Superset to use your custom SecurityManager** by setting `CUSTOM_SECURITY_MANAGER = CustomSecurityManager` in your `superset_config.py` file. If you need to preprocess headers or environment variables, you can also add custom middleware via the `ADDITIONAL_MIDDLEWARE` config option. See [middleware example](https://github.com/apache/superset/discussions/33131).

3. **Apply your changes**: Place your custom SecurityManager code in a Python file accessible to Superset (e.g., in your project directory), and update `superset_config.py` to import and use it.

There are no official plugins for Zitadel or generic OIDC/JWT API authentication in Superset, so this custom approach is required. For more details and community examples, see [this discussion](https://github.com/apache/superset/discussions/32038) and the [SupersetSecurityManager code](https://github.com/apache/superset/blob/829e4d92d91ceae4b43b1ed3b063ffe45377799c/superset/security/manager.py).


<!-- Dosu Comment Footer -->
*To reply, just mention [@dosu](https://go.dosu.dev/dosubot?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=reply-with-mention&utm_term=apache%2Fsuperset).*

---

Docs are dead. Just use [Dosu](https://dosu.dev?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-tagline&utm_term=apache%2Fsuperset).

[![Leave Feedback](https://img.shields.io/badge/Leave%20Feedback-555555?style=flat)](https://app.dosu.dev/response-feedback?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-feedback&utm_term=apache%2Fsuperset&message_id=4576260d-f1be-4170-bdc3-1bd69099ce51) [![Ask Dosu about superset](https://img.shields.io/badge/Ask%20Dosu%20about%20superset-2f7b3f?style=flat&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iODYiIGhlaWdodD0iODkiIHZpZXdCb3g9IjAgMCA4NiA4OSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNS4yOTIzNiAxMi43OTI4TDE3Ljc1OTMgNi42ODE4OFY3Mi41NjY3TDUuMjkyMzYgODQuMDYxOFYxMi43OTI4WiIgZmlsbD0iI0I0QkI5MSIvPjxwYXRoIGQ9Ik0xOC4yNTc1IDczLjExOTZMNTkuMTMyOSA3Mi43NDhMNTEuNzAxMSA4Mi40MDk1TDI5LjAzMzggODYuMjkxTDYuMjM5NjIgODUuMTU1NEwxOC4yNTc1IDczLjExOTZaIiBmaWxsPSIjNzc4NTYxIi8%2BPHBhdGggZD0iTTE3LjQ5MTYgMy43MzYzM0wzLjU4NTU3IDEyLjcwOTlWODMuNTc5MkMzLjU4NTU3IDg0Ljc1NDIgNC45ODU2MyA4NS4zNjUyIDUuODQ3MDUg
 ODQuNTY2TDE5LjYyOTYgNzEuNzgwMSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSI2LjQyODQ0IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48bWFzayBpZD0iZG9zdS1kLWN1dG91dCIgZmlsbD0id2hpdGUiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDAuNzA0IDAuNTE4MDY2SDE3LjA0MzlWNzYuMjIyMUg0MC43MDRINDIuNTgwNUg0Ny44MDEzQzY4LjcwNjQgNzYuMjIyMSA4NS42NTMzIDU5LjI3NTIgODUuNjUzMyAzOC4zNzAxQzg1LjY1MzMgMTcuNDY1IDY4LjcwNjMgMC41MTgwNjYgNDcuODAxMyAwLjUxODA2Nkg0Mi41ODA1SDQwLjcwNFoiLz48L21hc2s%2BPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MC43MDQgMC41MTgwNjZIMTcuMDQzOVY3Ni4yMjIxSDQwLjcwNEg0Mi41ODA1SDQ3LjgwMTNDNjguNzA2NCA3Ni4yMjIxIDg1LjY1MzMgNTkuMjc1MiA4NS42NTMzIDM4LjM3MDFDODUuNjUzMyAxNy40NjUgNjguNzA2MyAwLjUxODA2NiA0Ny44MDEzIDAuNTE4MDY2SDQyLjU4MDVINDAuNzA0WiIgZmlsbD0iI0YzRjZGMSIvPjxwYXRoIGQ9Ik0xNy4wNDM5IDAuNTE4MDY2Vi02LjU3OTE5SDkuOTQ2NjlWMC41MTgwNjZIMTcuMDQzOVpNMTcuMDQzOSA3Ni4yMjIxSDkuOTQ2NjlWODMuMzE5NEgxNy4wNDM5Vjc2LjIyMjFaTTE3LjA0MzkgNy42MTUzMkg0MC43MDRWLTYuNTc5MTlIMTcuMDQzOVY3LjYxNTMyWk0
 yNC4xNDEyIDc2LjIyMjFWMC41MTgwNjZIOS45NDY2OVY3Ni4yMjIxSDI0LjE0MTJaTTQwLjcwNCA2OS4xMjQ5SDE3LjA0MzlWODMuMzE5NEg0MC43MDRWNjkuMTI0OVpNNDIuNTgwNSA2OS4xMjQ5SDQwLjcwNFY4My4zMTk0SDQyLjU4MDVWNjkuMTI0OVpNNDcuODAxMyA2OS4xMjQ5SDQyLjU4MDVWODMuMzE5NEg0Ny44MDEzVjY5LjEyNDlaTTc4LjU1NiAzOC4zNzAxQzc4LjU1NiA1NS4zNTU1IDY0Ljc4NjcgNjkuMTI0OSA0Ny44MDEzIDY5LjEyNDlWODMuMzE5NEM3Mi42MjYxIDgzLjMxOTQgOTIuNzUwNSA2My4xOTQ5IDkyLjc1MDUgMzguMzcwMUg3OC41NTZaTTQ3LjgwMTMgNy42MTUzMkM2NC43ODY2IDcuNjE1MzIgNzguNTU2IDIxLjM4NDcgNzguNTU2IDM4LjM3MDFIOTIuNzUwNUM5Mi43NTA1IDEzLjU0NTMgNzIuNjI2IC02LjU3OTE5IDQ3LjgwMTMgLTYuNTc5MTlWNy42MTUzMlpNNDIuNTgwNSA3LjYxNTMySDQ3LjgwMTNWLTYuNTc5MTlINDIuNTgwNVY3LjYxNTMyWk00MC43MDQgNy42MTUzMkg0Mi41ODA1Vi02LjU3OTE5SDQwLjcwNFY3LjYxNTMyWiIgZmlsbD0iYmxhY2siIG1hc2s9InVybCgjZG9zdS1kLWN1dG91dCkiLz48cGF0aCBkPSJNNjguOTIxNSAzNi4wMTM1QzY4LjkyMTUgMzYuMDEzNSA2NS43MzY5IDQ5LjQ3MzggNTEuNDIzMSA0OS40NzM4QzM3LjEwOTMgNDkuNDczOCAzMi41Nzg3IDM3LjM1OTYgMzIuNTc4NyAzNi4wMTM1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjcuNjkxNjEi
 IHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik0wLjM0ODYzMyA4NS40OTQ2QzAuMzQ4NjMzIDg1LjQ5NDYgMjkuNDg1NiA4NS44MzA5IDM0LjgwOSA4NS42OThDNDQuODMzNyA4NS40NDc3IDUxLjI4NzIgODQuNDAyIDU3LjUyNjkgNzguOTcyNEM2Mi44MTI5IDc0LjM3MjcgNzUuMTM0MiA1OS42ODM2IDc1LjEzNDIgNTkuNjgzNiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSI2LjE2NDgyIi8%2BPC9zdmc%2B)](https://github.dosu.com/apache/superset?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-ask-repo&utm_term=apache%2Fsuperset) [![Share Dosu with your team](https://img.shields.io/badge/Share%20Dosu%20with%20your%20team-1f6feb?style=flat)](https://app.dosu.dev/signup?referrer=openSource&source=github-footer&utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-share-team&utm_term=apache%2Fsuperset)

GitHub link: https://github.com/apache/superset/discussions/34278#discussioncomment-13863861

----
This is an automatically sent email for notifications@superset.apache.org.
To unsubscribe, please send an email to: notifications-unsubscribe@superset.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [D] How to authenticate Superset with service account [superset]

Posted by "dosubot[bot] (via GitHub)" <gi...@apache.org>.
GitHub user dosubot[bot] edited a comment on the discussion: How to authenticate Superset with service account

<!-- Answer -->
Superset's API does not natively support authenticating with arbitrary external JWT/OIDC tokens (like those issued by Zitadel) for standard API operations such as asset imports. The default and supported approach is still to use session-based authentication: POST to `/api/v1/security/login` with the service account's username and password to obtain a session cookie, then use that cookie to GET `/api/v1/security/csrf_token/` for the CSRF token—just as you did with the default credentials.

If you want to use a Zitadel-issued token directly (for example, as a Bearer token in the Authorization header), Superset would need to be custom-configured with a custom SecurityManager and possibly middleware to validate and accept those tokens. This is an advanced setup and not part of the standard Superset configuration or documentation. There are community discussions and code examples about implementing such custom authentication flows if you want to explore that route further ([example discussion](https://github.com/apache/superset/discussions/33131)).

Unless you have already customized Superset to accept Zitadel tokens, the recommended and supported workflow is to use the service account's username/password with the login endpoint, then proceed as before for asset imports. If you do implement a custom authentication flow, ensure your token is accepted by Superset's authentication system—otherwise, requests to the CSRF endpoint will fail with an authentication error ([reference](https://github.com/apache/superset/issues/32257)).


<!-- Dosu Comment Footer -->
*To reply, just mention [@dosu](https://go.dosu.dev/dosubot?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=reply-with-mention&utm_term=apache%2Fsuperset).*

---

Share context across your team and agents. Try [Dosu](https://dosu.dev?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=knowledge-infrastructure-tagline&utm_term=apache%2Fsuperset).

[![Leave Feedback](https://img.shields.io/badge/Leave%20Feedback-555555?style=flat)](https://app.dosu.dev/response-feedback?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=knowledge-infrastructure-feedback&utm_term=apache%2Fsuperset&message_id=5751a6f2-2946-4ff2-82c7-a6ebbcd6e2c8) [![Learn about superset with Dosu](https://img.shields.io/badge/Learn%20about%20superset%20with%20Dosu-2f7b3f?style=flat&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iODYiIGhlaWdodD0iODkiIHZpZXdCb3g9IjAgMCA4NiA4OSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNS4yOTIzNiAxMi43OTI4TDE3Ljc1OTMgNi42ODE4OFY3Mi41NjY3TDUuMjkyMzYgODQuMDYxOFYxMi43OTI4WiIgZmlsbD0iI0I0QkI5MSIvPjxwYXRoIGQ9Ik0xOC4yNTc1IDczLjExOTZMNTkuMTMyOSA3Mi43NDhMNTEuNzAxMSA4Mi40MDk1TDI5LjAzMzggODYuMjkxTDYuMjM5NjIgODUuMTU1NEwxOC4yNTc1IDczLjExOTZaIiBmaWxsPSIjNzc4NTYxIi8%2BPHBhdGggZD0iTTE3LjQ5MTYgMy43MzYzM0wzLjU4NTU3IDEyLjcwOTlWODMuNTc5MkMzLjU4NTU3IDg0Ljc1NDIgNC4
 5ODU2MyA4NS4zNjUyIDUuODQ3MDUgODQuNTY2TDE5LjYyOTYgNzEuNzgwMSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSI2LjQyODQ0IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48bWFzayBpZD0iZG9zdS1kLWN1dG91dCIgZmlsbD0id2hpdGUiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDAuNzA0IDAuNTE4MDY2SDE3LjA0MzlWNzYuMjIyMUg0MC43MDRINDIuNTgwNUg0Ny44MDEzQzY4LjcwNjQgNzYuMjIyMSA4NS42NTMzIDU5LjI3NTIgODUuNjUzMyAzOC4zNzAxQzg1LjY1MzMgMTcuNDY1IDY4LjcwNjMgMC41MTgwNjYgNDcuODAxMyAwLjUxODA2Nkg0Mi41ODA1SDQwLjcwNFoiLz48L21hc2s%2BPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MC43MDQgMC41MTgwNjZIMTcuMDQzOVY3Ni4yMjIxSDQwLjcwNEg0Mi41ODA1SDQ3LjgwMTNDNjguNzA2NCA3Ni4yMjIxIDg1LjY1MzMgNTkuMjc1MiA4NS42NTMzIDM4LjM3MDFDODUuNjUzMyAxNy40NjUgNjguNzA2MyAwLjUxODA2NiA0Ny44MDEzIDAuNTE4MDY2SDQyLjU4MDVINDAuNzA0WiIgZmlsbD0iI0YzRjZGMSIvPjxwYXRoIGQ9Ik0xNy4wNDM5IDAuNTE4MDY2Vi02LjU3OTE5SDkuOTQ2NjlWMC41MTgwNjZIMTcuMDQzOVpNMTcuMDQzOSA3Ni4yMjIxSDkuOTQ2NjlWODMuMzE5NEgxNy4wNDM5Vjc2LjIyMjFaTTE3LjA0MzkgNy42MTUzMkg0MC43MDRWLTYuNT
 c5MTlIMTcuMDQzOVY3LjYxNTMyWk0yNC4xNDEyIDc2LjIyMjFWMC41MTgwNjZIOS45NDY2OVY3Ni4yMjIxSDI0LjE0MTJaTTQwLjcwNCA2OS4xMjQ5SDE3LjA0MzlWODMuMzE5NEg0MC43MDRWNjkuMTI0OVpNNDIuNTgwNSA2OS4xMjQ5SDQwLjcwNFY4My4zMTk0SDQyLjU4MDVWNjkuMTI0OVpNNDcuODAxMyA2OS4xMjQ5SDQyLjU4MDVWODMuMzE5NEg0Ny44MDEzVjY5LjEyNDlaTTc4LjU1NiAzOC4zNzAxQzc4LjU1NiA1NS4zNTU1IDY0Ljc4NjcgNjkuMTI0OSA0Ny44MDEzIDY5LjEyNDlWODMuMzE5NEM3Mi42MjYxIDgzLjMxOTQgOTIuNzUwNSA2My4xOTQ5IDkyLjc1MDUgMzguMzcwMUg3OC41NTZaTTQ3LjgwMTMgNy42MTUzMkM2NC43ODY2IDcuNjE1MzIgNzguNTU2IDIxLjM4NDcgNzguNTU2IDM4LjM3MDFIOTIuNzUwNUM5Mi43NTA1IDEzLjU0NTMgNzIuNjI2IC02LjU3OTE5IDQ3LjgwMTMgLTYuNTc5MTlWNy42MTUzMlpNNDIuNTgwNSA3LjYxNTMySDQ3LjgwMTNWLTYuNTc5MTlINDIuNTgwNVY3LjYxNTMyWk00MC43MDQgNy42MTUzMkg0Mi41ODA1Vi02LjU3OTE5SDQwLjcwNFY3LjYxNTMyWiIgZmlsbD0iYmxhY2siIG1hc2s9InVybCgjZG9zdS1kLWN1dG91dCkiLz48cGF0aCBkPSJNNjguOTIxNSAzNi4wMTM1QzY4LjkyMTUgMzYuMDEzNSA2NS43MzY5IDQ5LjQ3MzggNTEuNDIzMSA0OS40NzM4QzM3LjEwOTMgNDkuNDczOCAzMi41Nzg3IDM3LjM1OTYgMzIuNTc4NyAzNi4wMTM1IiBzdHJva2U9ImJsYWNrIiB
 zdHJva2Utd2lkdGg9IjcuNjkxNjEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik0wLjM0ODYzMyA4NS40OTQ2QzAuMzQ4NjMzIDg1LjQ5NDYgMjkuNDg1NiA4NS44MzA5IDM0LjgwOSA4NS42OThDNDQuODMzNyA4NS40NDc3IDUxLjI4NzIgODQuNDAyIDU3LjUyNjkgNzguOTcyNEM2Mi44MTI5IDc0LjM3MjcgNzUuMTM0MiA1OS42ODM2IDc1LjEzNDIgNTkuNjgzNiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSI2LjE2NDgyIi8%2BPC9zdmc%2B)](https://github.dosu.com/apache/superset?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=knowledge-infrastructure-learn-repo&utm_term=apache%2Fsuperset) [![Add Dosu to your team](https://img.shields.io/badge/Add%20Dosu%20to%20your%20team-1f6feb?style=flat)](https://app.dosu.dev/signup?referrer=openSource&source=github-footer&utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=knowledge-infrastructure-add-team&utm_term=apache%2Fsuperset)

GitHub link: https://github.com/apache/superset/discussions/34278#discussioncomment-13863472

----
This is an automatically sent email for notifications@superset.apache.org.
To unsubscribe, please send an email to: notifications-unsubscribe@superset.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org