Skip to content

Commit ab058bc

Browse files
committed
Sem-Ver: feature Add support to the various frameworks for being able to specify to not check jti uniqueness.
Signed-off-by: David Black <[email protected]>
1 parent 174e233 commit ab058bc

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

atlassian_jwt_auth/frameworks/common/backend.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ class Backend():
4242
'ASAP_VALID_ISSUERS': None,
4343

4444
# Enforce that the ASAP subject must match the issuer
45-
'ASAP_SUBJECT_SHOULD_MATCH_ISSUER': None
45+
'ASAP_SUBJECT_SHOULD_MATCH_ISSUER': None,
46+
47+
# Enforce that tokens have a unique JTI
48+
'ASAP_CHECK_JTI_UNIQUENESS': None,
4649
}
4750

4851
@abstractmethod
@@ -100,6 +103,8 @@ def _get_verifier(self, settings):
100103
if settings.ASAP_SUBJECT_SHOULD_MATCH_ISSUER is not None:
101104
kwargs = {'subject_should_match_issuer':
102105
settings.ASAP_SUBJECT_SHOULD_MATCH_ISSUER}
106+
if settings.ASAP_CHECK_JTI_UNIQUENESS is not None:
107+
kwargs['check_jti_uniqueness'] = settings.ASAP_CHECK_JTI_UNIQUENESS
103108
return JWTAuthVerifier(
104109
retriever,
105110
**kwargs

atlassian_jwt_auth/frameworks/django/tests/test_django.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ def test_request_with_duplicate_jti_is_rejected(self):
104104
self.check_response('needed', 'duplicate jti', 401,
105105
authorization=str_auth)
106106

107+
def test_request_with_duplicate_jti_is_accepted_as_per_setting(self):
108+
self.test_settings['ASAP_CHECK_JTI_UNIQUENESS'] = False
109+
token = create_token(
110+
issuer='client-app', audience='server-app',
111+
key_id='client-app/key01', private_key=self._private_key_pem
112+
)
113+
str_auth = 'Bearer ' + token.decode(encoding='iso-8859-1')
114+
self.check_response('needed', 'one', 200, authorization=str_auth)
115+
self.check_response('needed', 'one', 200, authorization=str_auth)
116+
107117
def test_request_with_string_headers_is_allowed(self):
108118
token = create_token(
109119
issuer='client-app', audience='server-app',

atlassian_jwt_auth/frameworks/flask/tests/test_flask.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ def test_request_with_duplicate_jti_is_rejected(self):
7272
self.assertEqual(self.send_request(token).status_code, 200)
7373
self.assertEqual(self.send_request(token).status_code, 401)
7474

75+
def test_request_with_duplicate_jti_is_accepted_as_per_setting(self):
76+
self.app.config['ASAP_CHECK_JTI_UNIQUENESS'] = False
77+
token = create_token(
78+
'client-app', 'server-app',
79+
'client-app/key01', self._private_key_pem
80+
)
81+
self.assertEqual(self.send_request(token).status_code, 200)
82+
self.assertEqual(self.send_request(token).status_code, 200)
83+
7584
def test_request_with_invalid_audience_is_rejected(self):
7685
token = create_token(
7786
'client-app', 'invalid-audience',

atlassian_jwt_auth/frameworks/wsgi/tests/test_wsgi.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,20 @@ def test_request_with_duplicate_jti_is_rejected(self):
7474
token=token, application=application)
7575
self.assertEqual(resp_info['status'], '401 Unauthorized')
7676

77+
def test_request_with_duplicate_jti_is_accepted_as_per_setting(self):
78+
token = create_token(
79+
'client-app', 'server-app',
80+
'client-app/key01', self._private_key_pem
81+
)
82+
self.config['ASAP_CHECK_JTI_UNIQUENESS'] = False
83+
application = self.get_app_with_middleware(self.config)
84+
body, resp_info, environ = self.send_request(
85+
token=token, application=application)
86+
self.assertEqual(resp_info['status'], '200 OK')
87+
body, resp_info, environ = self.send_request(
88+
token=token, application=application)
89+
self.assertEqual(resp_info['status'], '200 OK')
90+
7791
def test_request_with_invalid_audience_is_rejected(self):
7892
token = create_token(
7993
'client-app', 'invalid-audience',

0 commit comments

Comments
 (0)