From 28fe4647ec629242cc9263d9a0b97cc68d1b00cc Mon Sep 17 00:00:00 2001 From: Cristian Betivu Date: Tue, 12 Nov 2024 19:42:30 +0200 Subject: [PATCH] Don't use sync functions to introspect token --- src/keycloak/keycloak_openid.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/keycloak/keycloak_openid.py b/src/keycloak/keycloak_openid.py index ae9cd82..a38b58b 100644 --- a/src/keycloak/keycloak_openid.py +++ b/src/keycloak/keycloak_openid.py @@ -892,6 +892,25 @@ class KeycloakOpenID: ) return raise_error_from_response(data_raw, KeycloakPutError) + async def _a_token_info(self, token, method_token_info, **kwargs): + """Asynchronous getter for the token data. + + :param token: Token + :type token: str + :param method_token_info: Token info method to use + :type method_token_info: str + :param kwargs: Additional keyword arguments passed to the decode_token method + :type kwargs: dict + :returns: Token info + :rtype: dict + """ + if method_token_info == "introspect": + token_info = await self.a_introspect(token) + else: + token_info = await self.a_decode_token(token, **kwargs) + + return token_info + async def a_well_known(self): """Get the well_known object asynchronously. @@ -1301,7 +1320,7 @@ class KeycloakOpenID: "Keycloak settings not found. Load Authorization Keycloak settings." ) - token_info = self._token_info(token, method_token_info, **kwargs) + token_info = await self._a_token_info(token, method_token_info, **kwargs) if method_token_info == "introspect" and not token_info["active"]: raise KeycloakInvalidTokenError("Token expired or invalid.") @@ -1339,7 +1358,7 @@ class KeycloakOpenID: "Keycloak settings not found. Load Authorization Keycloak settings." ) - token_info = self._token_info(token, method_token_info, **kwargs) + token_info = await self._a_token_info(token, method_token_info, **kwargs) if method_token_info == "introspect" and not token_info["active"]: raise KeycloakInvalidTokenError("Token expired or invalid.")