@ -4,6 +4,8 @@ from inspect import iscoroutinefunction, signature
from typing import Tuple
from unittest import mock
import jwcrypto.jwk
import jwcrypto.jws
import pytest
from keycloak import KeycloakAdmin , KeycloakOpenID
@ -317,6 +319,39 @@ def test_decode_token(oid_with_credentials: Tuple[KeycloakOpenID, str, str]):
assert decoded_refresh_token [ " typ " ] == " Refresh " , decoded_refresh_token
def test_decode_token_invalid_token ( oid_with_credentials : Tuple [ KeycloakOpenID , str , str ] ) :
""" Test decode token with an invalid token.
: param oid_with_credentials : Keycloak OpenID client with pre - configured user credentials
: type oid_with_credentials : Tuple [ KeycloakOpenID , str , str ]
"""
oid , username , password = oid_with_credentials
token = oid . token ( username = username , password = password )
access_token = token [ " access_token " ]
decoded_access_token = oid . decode_token ( token = access_token )
key = oid . public_key ( )
key = " -----BEGIN PUBLIC KEY----- \n " + key + " \n -----END PUBLIC KEY----- "
key = jwcrypto . jwk . JWK . from_pem ( key . encode ( " utf-8 " ) )
invalid_access_token = access_token + " a "
with pytest . raises ( jwcrypto . jws . InvalidJWSSignature ) :
decoded_invalid_access_token = oid . decode_token ( token = invalid_access_token , validate = True )
with pytest . raises ( jwcrypto . jws . InvalidJWSSignature ) :
decoded_invalid_access_token = oid . decode_token (
token = invalid_access_token , validate = True , key = key
)
decoded_invalid_access_token = oid . decode_token ( token = invalid_access_token , validate = False )
assert decoded_access_token == decoded_invalid_access_token
decoded_invalid_access_token = oid . decode_token (
token = invalid_access_token , validate = False , key = key
)
assert decoded_access_token == decoded_invalid_access_token
def test_load_authorization_config ( oid_with_credentials_authz : Tuple [ KeycloakOpenID , str , str ] ) :
""" Test load authorization config.
@ -765,7 +800,7 @@ async def test_a_introspect(oid_with_credentials: Tuple[KeycloakOpenID, str, str
@pytest.mark.asyncio
async def test_a_decode_token ( oid_with_credentials : Tuple [ KeycloakOpenID , str , str ] ) :
""" Test decode token.
""" Test decode token asynchronously .
: param oid_with_credentials : Keycloak OpenID client with pre - configured user credentials
: type oid_with_credentials : Tuple [ KeycloakOpenID , str , str ]
@ -781,6 +816,44 @@ async def test_a_decode_token(oid_with_credentials: Tuple[KeycloakOpenID, str, s
assert decoded_refresh_token [ " typ " ] == " Refresh " , decoded_refresh_token
@pytest.mark.asyncio
async def test_a_decode_token_invalid_token ( oid_with_credentials : Tuple [ KeycloakOpenID , str , str ] ) :
""" Test decode token asynchronously an invalid token.
: param oid_with_credentials : Keycloak OpenID client with pre - configured user credentials
: type oid_with_credentials : Tuple [ KeycloakOpenID , str , str ]
"""
oid , username , password = oid_with_credentials
token = await oid . a_token ( username = username , password = password )
access_token = token [ " access_token " ]
decoded_access_token = await oid . a_decode_token ( token = access_token )
key = await oid . a_public_key ( )
key = " -----BEGIN PUBLIC KEY----- \n " + key + " \n -----END PUBLIC KEY----- "
key = jwcrypto . jwk . JWK . from_pem ( key . encode ( " utf-8 " ) )
invalid_access_token = access_token + " a "
with pytest . raises ( jwcrypto . jws . InvalidJWSSignature ) :
decoded_invalid_access_token = await oid . a_decode_token (
token = invalid_access_token , validate = True
)
with pytest . raises ( jwcrypto . jws . InvalidJWSSignature ) :
decoded_invalid_access_token = await oid . a_decode_token (
token = invalid_access_token , validate = True , key = key
)
decoded_invalid_access_token = await oid . a_decode_token (
token = invalid_access_token , validate = False
)
assert decoded_access_token == decoded_invalid_access_token
decoded_invalid_access_token = await oid . a_decode_token (
token = invalid_access_token , validate = False , key = key
)
assert decoded_access_token == decoded_invalid_access_token
@pytest.mark.asyncio
async def test_a_load_authorization_config (
oid_with_credentials_authz : Tuple [ KeycloakOpenID , str , str ]