myselfuser1 opened a new issue, #32023:
URL: https://github.com/apache/superset/issues/32023

   ### Bug description
   
   Here is the code from `superset_config.py`
   
   ```
   SECRET_KEY = 'my_secret_key'
   AUTH_TYPE = AUTH_OAUTH
   
LOGOUT_REDIRECT_URL='https://localhost:3000/auth/realms/master/protocol/openid-connect/logout'
   AUTH_USER_REGISTRATION = True
   # AUTH_USER_REGISTRATION_ROLE = "Gamma"
   OAUTH_PROVIDERS = [
       {
           'name': 'keycloak',
           'token_key': 'access_token',
           'icon': 'fa-key',
           'remote_app': {
               'client_id': 'MY_CLIENT_ID',  # Replace with your Keycloak 
client ID
               'client_secret': 'MY_CLIENT_SECRET',  # Replace with your 
Keycloak client secret
               'api_base_url': 
'https://localhost:3000/auth/realms/master/protocol/openid-connect/',  # 
Replace with your Keycloak realm URL
               'client_kwargs': {
                   'scope': 'openid profile email',
                   'roles_key': 'realm_access.roles',
               },
               'server_metadata_url': 
'https://localhost:3000/realms/master/.well-known/openid-configuration',
               'api_base_url': 'https://localhost:3000/realms/master/protocol/',
               'access_token_url': 
'https://localhost:3000/auth/realms/master/protocol/openid-connect/token',  # 
Replace with your Keycloak token URL
               'authorize_url': 
'https://localhost:3000/auth/realms/master/protocol/openid-connect/auth',  # 
Replace with your Keycloak authorization URL
               'jwks_uri': 
'https://localhost:3000/auth/realms/master/protocol/openid-connect/certs',  # 
Replace with your Keycloak JWKS URI
           },
       }
   ]
   AUTH_ROLES_SYNC_AT_LOGIN = True
   
   JWT_ALGORITHM = "RS256"
   # URL to the public key endpoint
   public_key_url = "https://localhost:3000/auth/realms/master";
   
   
   def fetch_keycloak_rs256_public_cert():
       with urllib.request.urlopen(public_key_url) as response:  # noqa: S310
           public_key_url_response = json.load(response)
       public_key = public_key_url_response["public_key"]
       if public_key:
           pem_lines = [
               "-----BEGIN PUBLIC KEY-----",
               public_key,
               "-----END PUBLIC KEY-----",
           ]
           cert_pem = "\n".join(pem_lines)
       else:
           cert_pem = "No cert found"
       return cert_pem
   
   print("aaaaa")
   JWT_PUBLIC_KEY = fetch_keycloak_rs256_public_cert()
   print("bbbbbb")
   AUTH_ROLES_MAPPING = {
       'Super Admin': ['Admin', 'sql_lab'],
       'Portal Admin': ['Admin',],
       'Company Admin': ['Admin',],
       'Admin': ['Admin',],
       'admin': ['Admin',],
       'Non C-Cash User': ['Public'],
       'Ex C-Cash User': ['Public'],
       'External Users': ['Public'],
       'Licensed C-Cash User': ['Alpha'],
       'C-Cash User': ['Gamma'],
   }
   AUTH_ROLES_SYNC_AT_LOGIN = True
   AUTH_USER_REGISTRATION = True
   AUTH_USER_REGISTRATION_ROLE = "Public"
   
   class CustomSsoSecurityManager(SupersetSecurityManager):
       def oauth_user_info(self, provider, response=None):  # noqa: ARG002
           me = 
self.appbuilder.sm.oauth_remotes[provider].get("openid-connect/userinfo")
           me.raise_for_status()
           data = me.json()
           logging.debug("User info from Keycloak: %s", data)
           return {
               "username": data.get("preferred_username", ""),
               "first_name": data.get("given_name", ""),
               "last_name": data.get("family_name", ""),
               "email": data.get("email", ""),
               "role_keys": data.get("role_keys", []),
           }
   
       def load_user_jwt(self, _jwt_header, jwt_data):
           username = jwt_data["preferred_username"]
           user = self.find_user(username=username)
           if user.is_active:
               # Set flask g.user to JWT user, we can't do it on before request
               g.user = user
               return user
           return None
   
   CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager
   ```
   
   
   
   ### Screenshots/recordings
   
   Every time i sign in , the public role is assigned to the user on superset 
irrespective of what role is present for that user in keycloak
   
   ### Superset version
   
   master / latest-dev
   
   ### Python version
   
   3.9
   
   ### Node version
   
   16
   
   ### Browser
   
   Chrome
   
   ### Additional context
   
   _No response_
   
   ### Checklist
   
   - [x] I have searched Superset docs and Slack and didn't find a solution to 
my problem.
   - [x] I have searched the GitHub issue tracker and didn't find a similar bug 
report.
   - [x] I have checked Superset's logs for errors and if I found a relevant 
Python stacktrace, I included it here as text in the "additional context" 
section.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to