addressing review comments
diff --git a/clients/python/airavata_custos/security/keycloak_connectors.py b/clients/python/airavata_custos/security/keycloak_connectors.py
index 07e8dd8..99d4c72 100644
--- a/clients/python/airavata_custos/security/keycloak_connectors.py
+++ b/clients/python/airavata_custos/security/keycloak_connectors.py
@@ -22,6 +22,7 @@
 from oauthlib.oauth2 import BackendApplicationClient
 from requests_oauthlib import OAuth2Session
 from custos.commons.model.security.ttypes import AuthzToken
+from urllib.parse import quote
 
 
 class KeycloakBackend(object):
@@ -38,7 +39,7 @@
         """
         Method to authenticate a gateway user with keycloak
         :param user_credentials: object of UserCredentials class
-        :return: Token object, UserInfo object
+        :return: openid token, openid user information
         """
         try:
             token, user_info = self._get_token_and_user_info_password_flow(user_credentials)
@@ -50,7 +51,7 @@
         """
 
         :param account_credentials: object of AccountCredentials class
-        :return: Token object, Account info object
+        :return: openid token, openid user information
         """
         try:
             token, account_info = self._get_token_and_user_info_redirect_flow(account_credentials)
@@ -63,7 +64,7 @@
 
         :param client_credentials: object of ClientCredentials class
         :param refresh_token: openid connect refresh token
-        :return: Token object
+        :return: openid token
         """
         try:
             token = self._get_token_from_refresh_token(client_credentials, refresh_token)
@@ -71,6 +72,21 @@
         except Exception as e:
             return None
 
+    def redirect_login(self, client_id, redirect_uri, idp_alias):
+        """
+
+        :param client_id: client identifier received after registering the tenant
+        :param redirect_uri: redirect url
+        :param idp_alias: idp to which redirection has to be made
+        :return:authorization_url, redirect_uri, state
+        """
+        redirect_uri += '?idp_alias=' + quote(idp_alias)
+        base_authorize_url = self.keycloak_settings.KEYCLOAK_AUTHORIZE_URL
+        oauth2_session = OAuth2Session(client_id, scope='openid', redirect_uri=redirect_uri)
+        authorization_url, state = oauth2_session.authorization_url(base_authorize_url)
+        authorization_url += '&kc_idp_hint=' + quote(idp_alias)
+        return authorization_url, redirect_uri, state
+
     def get_authorization_token(self, client_credentials, tenant_id, username=None):
         """
         This method created a authorization token for the user or a service account
@@ -83,7 +99,7 @@
         client = BackendApplicationClient(client_id=client_credentials.client_id)
         oauth = OAuth2Session(client=client)
         token = oauth.fetch_token(
-            token_url=self.keycloak_settings.token_url,
+            token_url=self.keycloak_settings.KEYCLOAK_TOKEN_URL,
             client_id=client_credentials.client_id,
             client_secret=client_credentials.client_secret,
             verify=client_credentials.verify_ssl)
@@ -93,7 +109,6 @@
             accessToken=access_token,
             claimsMap={'gatewayID': tenant_id, 'userName': username})
 
-
     def _get_token_and_user_info_password_flow(self, client_credentials):
 
         oauth2_session = OAuth2Session(client=LegacyApplicationClient(client_id=client_credentials.client_id))
@@ -104,7 +119,7 @@
                                            client_secret=client_credentials.client_secret,
                                            verify=self.keycloak_settings.VERIFY_SSL)
         user_info = oauth2_session.get(self.keycloak_settings.KEYCLOAK_USERINFO_URL).json()
-        return self._process_token(token), self._process_userinfo(user_info)
+        return token, user_info
 
     def _get_token_and_user_info_redirect_flow(self, client_credentials):
         oauth2_session = OAuth2Session(client_credentials.client_id,
@@ -116,7 +131,7 @@
                                            authorization_response=client_credentials.authorization_code_url,
                                            verify=self.keycloak_settings.VERIFY_SSL)
         user_info = oauth2_session.get(self.keycloak_settings.KEYCLOAK_USERINFO_URL).json()
-        return self._process_token(token), self._process_userinfo(user_info)
+        return token, user_info
 
     def _get_token_from_refresh_token(self, client_credentials, refresh_token):
 
@@ -126,26 +141,7 @@
                                              refresh_token=refresh_token,
                                              auth=auth,
                                              verify=self.keycloak_settings.VERIFY_SSL)
-        return self._process_token(token)
-
-    @classmethod
-    def _process_token(cls, token):
-
-        now = time.time()
-        access_token = token['access_token']
-        access_token_expires_at = now + token['expires_in']
-        refresh_token = token['refresh_token']
-        refresh_token_expires_at = now + token['refresh_expires_in']
-        return Token(access_token, access_token_expires_at, refresh_token, refresh_token_expires_at)
-
-    @classmethod
-    def _process_userinfo(cls, userinfo):
-
-        username = userinfo['preferred_username']
-        email = userinfo['email']
-        first_name = userinfo['given_name']
-        last_name = userinfo['family_name']
-        return UserInfo(username, email, first_name, last_name)
+        return token
 
     def _load_settings(self, configuration_file_location):
         config = configparser.ConfigParser()
@@ -157,20 +153,3 @@
         self.keycloak_settings.KEYCLOAK_USERINFO_URL = settings['KEYCLOAK_USERINFO_URL']
         self.keycloak_settings.VERIFY_SSL = settings.getboolean('VERIFY_SSL')
 
-
-class Token(object):
-
-    def __init__(self, access_token, access_token_expires_at, refresh_token, refresh_token_expires_at):
-        self.access_token = access_token
-        self.access_token_expires_at = access_token_expires_at
-        self.refresh_token = refresh_token
-        self.refresh_token_expires_at = refresh_token_expires_at
-
-
-class UserInfo(object):
-
-    def __init__(self, username, email, first_name, last_name):
-        self.username = username
-        self.email = email
-        self.first_name = first_name
-        self.last_name = last_name