Skip to content
This repository was archived by the owner on Apr 26, 2025. It is now read-only.

Commit b4da8a3

Browse files
committed
Improve invalid JWT detection
1 parent fe3a6ee commit b4da8a3

File tree

4 files changed

+24
-3
lines changed

4 files changed

+24
-3
lines changed

fief_client/client.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,9 +321,7 @@ def _validate_access_token(
321321

322322
except jwt.JWTExpired as e:
323323
raise FiefAccessTokenExpired() from e
324-
except jwt.JWException as e:
325-
raise FiefAccessTokenInvalid() from e
326-
except KeyError as e:
324+
except (jwt.JWException, KeyError, ValueError) as e:
327325
raise FiefAccessTokenInvalid() from e
328326

329327
def _decode_id_token(

tests/test_client.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,10 @@ async def test_valid_response_async(
441441

442442

443443
class TestValidateAccessToken:
444+
def test_invalid_token(self, fief_client: Fief):
445+
with pytest.raises(FiefAccessTokenInvalid):
446+
fief_client.validate_access_token("INVALID_TOKEN")
447+
444448
def test_invalid_signature(self, fief_client: Fief):
445449
with pytest.raises(FiefAccessTokenInvalid):
446450
fief_client.validate_access_token(
@@ -531,6 +535,11 @@ def test_valid_permission(
531535
"access_token": access_token,
532536
}
533537

538+
@pytest.mark.asyncio
539+
async def test_async_invalid_token(self, fief_async_client: FiefAsync):
540+
with pytest.raises(FiefAccessTokenInvalid):
541+
await fief_async_client.validate_access_token("INVALID_TOKEN")
542+
534543
@pytest.mark.asyncio
535544
async def test_async_invalid_signature(self, fief_async_client: FiefAsync):
536545
with pytest.raises(FiefAccessTokenInvalid):

tests/test_integrations_fastapi.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ async def test_missing_token(self, test_client: httpx.AsyncClient):
166166

167167
assert response.status_code == status.HTTP_401_UNAUTHORIZED
168168

169+
async def test_invalid_token(self, test_client: httpx.AsyncClient):
170+
response = await test_client.get(
171+
"/authenticated", headers={"Authorization": "Bearer INVALID_TOKEN"}
172+
)
173+
174+
assert response.status_code == status.HTTP_401_UNAUTHORIZED
175+
169176
async def test_expired_token(
170177
self, test_client: httpx.AsyncClient, generate_access_token
171178
):

tests/test_integrations_flask.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,13 @@ def test_invalid_authorization_header(self, test_client: FlaskClient):
122122

123123
assert response.status_code == 401
124124

125+
def test_invalid_token(self, test_client: FlaskClient):
126+
response = test_client.get(
127+
"/authenticated", headers={"Authorization": "Bearer INVALID_TOKEN"}
128+
)
129+
130+
assert response.status_code == 401
131+
125132
def test_expired_token(self, test_client: FlaskClient, generate_access_token):
126133
access_token = generate_access_token(encrypt=False, exp=0)
127134

0 commit comments

Comments
 (0)