Skip to content

Commit 714285a

Browse files
committed
Optimize JWK fetching using the KeyId.
1 parent a57cc2d commit 714285a

File tree

6 files changed

+13
-12
lines changed

6 files changed

+13
-12
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ This is the changelog for [Authress SDK](readme.md).
33

44
## 3.1 ##
55
* [Breaking] Throw validation error on setting a property that doesn't exist in any of the Authress DTO Models.
6+
* Optimize JWKs fetching using the keyId
67

78
## 3.0 ##
89
* [Breaking] Added type checking everywhere - This means most models have breaking changes.

authress/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from authress.authress_client import AuthressClient
1010
from authress.http_client import HttpClient
1111
from authress.rest import ApiException
12+
from authress.utils.service_client_token_provider import ServiceClientTokenProvider
1213

1314
# import apis into sdk package
1415
from authress.api.access_records_api import AccessRecordsApi

authress/api/token_verifier.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def get_key_uncached(self, jwkKeyListUrl, kid):
8181
headers = {
8282
'User-Agent': f'Authress SDK; Python; {version};'
8383
}
84-
result = self.http_client.get_request_with_retries(jwkKeyListUrl, headers=headers)
84+
result = self.http_client.request_with_retries('GET', jwkKeyListUrl, headers=headers)
8585

8686
for index, key in enumerate(json.loads(result.data)['keys']):
8787
if key['kid'] == kid:

authress/authress_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def __init__(self, authress_api_url=None, service_client_access_key=None, user_a
2828
self._host = re.sub(r'/+$', '', self._host)
2929

3030
self._http_client = HttpClient(host=self._host, access_key=service_client_access_key, user_agent=user_agent)
31-
self._token_verifier = token_verifier.TokenVerifier(http_client=_http_client)
31+
self._token_verifier = token_verifier.TokenVerifier(http_client=self._http_client)
3232

3333
def set_token(self, token: str):
3434
self._http_client.set_token(token)

test/test_service_client_token_provider.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from authress.models import *
77
from authress.utils import ServiceClientTokenProvider, JwtManager
88
from authress import AuthressClient
9-
from authress.http_client import HttpClient
109

1110
import unittest
1211
from unittest.mock import patch
@@ -27,10 +26,10 @@ def test_get_token(self):
2726

2827
access_key = 'eyJrZXlJZCI6ImNjYjFjZGJmLTM0NzYtNGNiNy05Njc1LTVlMzNmYjI5NTNjMyIsInByaXZhdGVLZXkiOiItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRFFidWFBd0V6VkJHZnZcbjBEL2JKSjRHa2JoV2oyRy9lYTF3UUZNeWxiK0ZzTDM1dGJvVHNIUGdvbUtGMDNNQkphWmRBVHhwcnhYa2xvYWNcblFhYkE4eXcyQ2lFbitHNjlMcUFnUVlLSmZzL1psWEo4MVJ0TkR0TkZRUTdPS0xpSGJrU1I1cFU3R0lKNENQZTZcbkxHM3UzUkVUbFFndmlhV2M2bzVOUkRMWTBIbzhya2w0Yk8rZjMycXg2SGV6dzBsUnZOK1I4L24vZUxLbCtGVlpcbk1yYzFkcmh5NDdtVU80ZnJKWW1LSzg2ZGZacVk4RVh2aGpjaFZzdHhSTXdtMlRDbUtWT2xsQWUrandmNTR5Q2NcbnUzcTNsRUxzcnhXTlRsVC9mRHBQQSt6MDh2MFdDa2ozdWo5SEh3REE1VjhZaUtJOEFheWRLSG9nYnA5eHp1amdcbnZwQmVacnRuQWdNQkFBRUNnZ0VBZnRpL0Z1UHcza0tNTG5vQ0lvK3FURDBxZmlOTVRZYnpjamp6YVBtUlVQODZcbjNsa21JUTFsdC9PYkdlNlJNc1dDOVY3bk1Ub0lqTkMrb3lHaEpoUFhlQnU2Q2VVN0g0N2NqRVRSK0hOZ2N2NXNcbmFtUVc5VkpzYU4wcThYUCt1UXoyVmdTS0ZTalpYY3UzVjJucWpVK2tNTktsNUtoVVRhYkJhMnh4dFZsS3l0bjlcbld6QnIzZExLVXBwYzdoZXFaa2diSHE2amZXd3h2Vk56cmhkNUZ1Tm5EeWI2R3QrUXhzYi83dmdhdnRsNmtXM0hcbnU5ZUtGcjJhdER4VHhaTDArRVIxWjVyV21MNzdUK3owQitYVkZJZ05ia2FlSURBZjEzRjBPSzE3YjJ4NmlSSjVcbnJCRTdCc0ZhMGVuOXBjSWN2UUxhbGFMREVOL1d2YWd4dnowSWZ4M1R3UUtCZ1FEbjVMSGhFczBzeWxYVUdrVlFcbmhFU1ZacGh5QzdFRHBZYm44UW5DNkI3ZDFtWkR1d1JuSkMyZXVxT1lNMFlVcWlGT3Q5RW9UMllNQy9jT2pUVTFcbndnMm9GQ0hqWUI4cGptNHVkb3B3MHRHcGRyb1piQVNkOHkzR1RuNitMK25tVGVzNjYxTGN6ekhSekhrTnh5OUJcbkNVNTRzWXhnK1M5bnhSTjdEVERxeTE2M1dRS0JnUURtR2Q1Snl4VnNyS3ZVSmFVbDM5ekZRcTh3cnpTZ0xZVVBcbjF0a1dHYWhIanFvRjYvSnM2YUZnZlYraXl5THk1dm03WEN0dUw2RGtEQW93NnVpS1NiRlhicnVCYW5GSDBnWktcbkRaVmVQcU9mbTVIYWJWalB1VmdPdW5HWHBOMnZ4QTdwNkg0SkMxOVkvUkg0MkY5bHE4aUtkejZXWHJYMjNPRHFcbjQrcHZtdzF3dndLQmdRQ0YyajlHNExobjR6OFptRFJzWG56TUZCVm90eER0UHUyWkVrd0ZJa0UyNFp2VCtxNTJcbjdxNGFramIrRXBLZ09QZlMzVTJ3eSt2bWhqMk1PN3Y4Rk5BWE5jKzkxRzBJYXJ0MHZGMzY4K1dyd09sNDVSM2hcbklrNUl5bVJrV1huVXd5TkZ0akgxWE8rdjN5djg1UDJFdDkrQTBWTnJZa3FYeG0wUk9UTUVSSEdldVFLQmdEZmdcbnNrMkRSc21rU1BuMHhsMGpOdTZrV2Z6ZG4wOENudHlRMVJqNzFCVEVmVitBdzlkVkNQNXdrOGZwd3F2d0VWZEJcbmM3NkhURy8weUlqR2t2LzZFMW5qSngrdlpLRUhUTVd3OU1QMVBERG5TNDBhbnNXYkFkcFp4bm9IN0ZuaHA2bC9cbjd4TnRNcE5lcVgyZnRkTHYyM3hjcHROSFhyTDdRcGRvRDZkWXBQUHJBb0dCQU5CN2QyME5kY1EzaTBmWGJ6dGhcbk1RUFIwK3NEVkViMUZjSUdXbDdPeXNvYy9UZ2prT3NhVDRTL2hXODg1RGR5ZnZHbjdpRmpyMDBPQVVyVjE5NlRcbmFwdDJNS0EvWVdWeG9Ud2kwZCs0UHZ5Mnk3SXBnMk9tcEE0bVliYnBXQ0NPS3dtczlEQ0E4MVVGeEJiMHdUbTdcbjlXVStVbGZMWDAvcGNkSFNEZkExbXVjZVxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuIiwiYXVkaWVuY2UiOiIyMmJiYzUwMi0zYjdhLTRjNTQtOGE2ZS1jMDRhM2NhNGRmNWYuYWNjb3VudHMuYXV0aHJlc3MuaW8iLCJjbGllbnRJZCI6IjIzYjRiY2Q1LWMwYzEtNDYwMi05NGU1LThkYTgyNzNkMGRiMCJ9'
2928

30-
http_client = HttpClient("", access_key)
31-
token1 = http_client._get_client_token()
29+
service_client_token_provider = ServiceClientTokenProvider(access_key, "")
30+
token1 = service_client_token_provider.get_client_token()
3231
time.sleep(2)
33-
token2 = http_client._get_client_token()
32+
token2 = service_client_token_provider.get_client_token()
3433
assert token1 == token2
3534
pass
3635

@@ -42,10 +41,10 @@ def test_get_token_for_eddsa(self):
4241

4342
access_key = 'CLIENT.KEY.ACCOUNT.MC4CAQAwBQYDK2VwBCIEIIM7npIckfT431rYzEeF+hCqvHogpOllmVSgINwqQv+g'
4443

45-
http_client = HttpClient("", access_key)
46-
token1 = http_client._get_client_token()
44+
service_client_token_provider = ServiceClientTokenProvider(access_key, "")
45+
token1 = service_client_token_provider.get_client_token()
4746
time.sleep(2)
48-
token2 = http_client._get_client_token()
47+
token2 = service_client_token_provider.get_client_token()
4948
assert token1 == token2
5049
pass
5150

@@ -55,8 +54,8 @@ def test_get_token_without_access_key(self):
5554
Ignores access keys that are None
5655
"""
5756

58-
http_client = HttpClient("")
59-
token1 = http_client._get_client_token()
57+
service_client_token_provider = ServiceClientTokenProvider("")
58+
token1 = service_client_token_provider.get_client_token()
6059
assert token1 == None
6160
pass
6261

test/test_token_verifier.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def test_get_token_for_eddsa(self):
2929
token_verifier_instance.get_key_uncached = mock_get_key_uncached
3030
identity = token_verifier_instance.verify_token(authressCustomDomain=f"https://{customDomain}", token=access_key)
3131

32-
mock_get_key_uncached.assert_called_once_with(f"https://{customDomain}/v1/clients/CLIENT/.well-known/openid-configuration/jwks", "KEY")
32+
mock_get_key_uncached.assert_called_once_with(f"https://{customDomain}/v1/clients/CLIENT/.well-known/openid-configuration/jwks?kid=KEY", "KEY")
3333
assert identity['iss'] == f'https://{customDomain}/v1/clients/CLIENT'
3434
assert identity['sub'] == "CLIENT"
3535

0 commit comments

Comments
 (0)