Skip to content

Commit c8840c8

Browse files
authored
Merge pull request #13 from Authress/improve-caching-verify-token
Improve caching in verify_token.
2 parents c79f468 + 55bd29e commit c8840c8

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ This is the changelog for [Authress SDK](readme.md).
1414
* [Breaking] Renamed `AccessRecordStatement` model to `Statement` in `models.statement.py`.
1515
* [Breaking] Renamed `AccessRecordResource` model to `Resource` in `models.resource.py`.
1616
* Add missing `If-Unmodified-Since` support to the `update_group` in the `Groups` API.
17+
* Improve caching in `verify_token`
1718

1819
## 2.0 ##
1920
* Add support for users and groups at the statement level of access records.

authress/api/token_verifier.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def verify_token(self, authressCustomDomain, token, options=None):
5151
if (clientIdMatcher is not None and clientIdMatcher.group(1) != unverifiedPayload['sub']):
5252
raise Exception("Unauthorized", "Service ID does not match token sub claim")
5353

54-
jwk = options['expectedPublicKey'] if options is not None and 'expectedPublicKey' in options else self.get_public_key(f"{issuer}/.well-known/openid-configuration/jwks", kid)
54+
jwk = self.get_public_key(f"{issuer}/.well-known/openid-configuration/jwks", kid)
5555

5656
try:
5757
return jwt.decode(authenticationToken, jwt.api_jwk.PyJWK.from_dict(jwk).key, algorithms=['EdDSA'], options = { 'verify_aud': False })
@@ -61,7 +61,7 @@ def verify_token(self, authressCustomDomain, token, options=None):
6161
def get_public_key(self, jwkKeyListUrl, kid):
6262
hashKey = f"{jwkKeyListUrl}|{kid}"
6363

64-
if hashKey in self.keyMap is not None:
64+
if hashKey in self.keyMap is None:
6565
self.keyMap[hashKey] = self.get_key_uncached(jwkKeyListUrl, kid)
6666

6767
try:

test/test_token_verifier.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import absolute_import
22

33
import unittest
4+
import unittest.mock
45

56
from authress.api import token_verifier
67

@@ -22,5 +23,27 @@ def test_get_token_for_eddsa(self):
2223
access_key = 'CLIENT.KEY.ACCOUNT.MC4CAQAwBQYDK2VwBCIEIDVjjrIVCH3dVRq4ixRzBwjVHSoB2QzZ2iJuHq1Wshwp'
2324
publicKey = { 'alg': 'EdDSA', 'kty': 'OKP', 'crv': 'Ed25519', 'x': 'JxtSC5tZZJuaW7Aeu5Kh_3tgCpPZRkHaaFyTj5sQ3KU' }
2425

25-
identity = token_verifier.TokenVerifier().verify_token(authressCustomDomain=f"https://{customDomain}", token=access_key, options={ 'expectedPublicKey': publicKey })
26-
assert identity['iss'] == f'https://{customDomain}/v1/clients/CLIENT'
26+
token_verifier_instance = token_verifier.TokenVerifier()
27+
28+
mock_get_key_uncached = unittest.mock.MagicMock(return_value=publicKey)
29+
token_verifier_instance.get_key_uncached = mock_get_key_uncached
30+
identity = token_verifier_instance.verify_token(authressCustomDomain=f"https://{customDomain}", token=access_key)
31+
32+
mock_get_key_uncached.assert_called_once_with(f"https://{customDomain}/v1/clients/CLIENT/.well-known/openid-configuration/jwks", "KEY")
33+
assert identity['iss'] == f'https://{customDomain}/v1/clients/CLIENT'
34+
assert identity['sub'] == "CLIENT"
35+
36+
def test_get_public_key(self):
37+
token_verifier_instance = token_verifier.TokenVerifier()
38+
39+
test_key_value = "TestKeyValue"
40+
mock_get_key_uncached = unittest.mock.MagicMock(return_value=test_key_value)
41+
token_verifier_instance.get_key_uncached = mock_get_key_uncached
42+
43+
public_key_1 = token_verifier_instance.get_public_key(f'https://{customDomain}/v1/clients/CLIENT', "Test KID")
44+
public_key_2 = token_verifier_instance.get_public_key(f'https://{customDomain}/v1/clients/CLIENT', "Test KID")
45+
46+
mock_get_key_uncached.assert_called_once_with(f'https://{customDomain}/v1/clients/CLIENT', "Test KID")
47+
48+
assert public_key_1 == public_key_2
49+
assert public_key_1 == test_key_value

0 commit comments

Comments
 (0)