diff --git a/apiserver/main.py b/apiserver/main.py index 6a9f227b1244fb521f6039fc5ff65005be0ec6be..865ef4a86dd6bbff5105e2262a6e71dbb066aaac 100644 --- a/apiserver/main.py +++ b/apiserver/main.py @@ -88,7 +88,7 @@ oauth.register( server_metadata_url=settings.server_metadata_url, client_secret=settings.client_secret, client_kwargs={ - 'scope' : 'openid email profile' + 'scope' : 'openid email profile eflows' } ) @@ -120,27 +120,27 @@ async def keycloak_login(request: Request): async def keycloak_token(request: Request): """obtain keycloak token via cookie, generate custom token and return it""" token = await oauth.keycloak.authorize_access_token(request) - user = token['userinfo'] + + user = await oauth.keycloak.userinfo(token=token) + + persistent_identifier = token["userinfo"]["sub"] + log.debug(str(user)) + # now we have an authenticated user # check if the user is in the database, if not: # check for the roles that are in the IdP and create accordingly (may result in no new user creation and a return of a 403) # generate a datacat auth token for the user that identical to a token received from /token # store it in the session cookie, return it via a redirect to the user frontend - username = user['preferred_username'] email = user['email'] - groups = user['groups'] - if userdb.get(username) is None: + + if userdb.get(persistent_identifier) is None: # check if user should be added, and with or without secrets access_group = "datacat_write" - secrets_group = "datacat_secrets" - if access_group not in groups: - raise HTTPException(403, "User is not authorized for write access to the datacatalogue.") - if secrets_group not in groups: - userdb.add_external_auth_user(username, email) - else: - userdb.add_external_auth_user(username, email, True) - datacat_user = userdb.get(username) + userdb.add_external_auth_user(persistent_identifier, email) + + + datacat_user = userdb.get(persistent_identifier) access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRES_MINUTES) access_token = create_access_token(