Skip to content
This repository was archived by the owner on Jun 23, 2023. It is now read-only.

Commit 3a7787c

Browse files
committed
chore: src/oidcop/token/id_token.py coverage from 86% to 90%
1 parent 7310304 commit 3a7787c

3 files changed

Lines changed: 52 additions & 4 deletions

File tree

src/oidcop/token/id_token.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,16 +298,21 @@ def info(self, token):
298298
:param token: A token
299299
:return: tuple of token type and session id
300300
"""
301+
301302
_context = self.server_get("endpoint_context")
302303

303304
_jwt = factory(token)
304305
_payload = _jwt.jwt.payload()
305-
client_info = _context.cdb[_payload["aud"][0]]
306+
client_id = _payload["aud"][0]
307+
client_info = _context.cdb[client_id]
306308
alg_dict = get_sign_and_encrypt_algorithms(
307309
_context, client_info, "id_token", sign=True
308310
)
309311

310-
verifier = JWT(key_jar=_context.keyjar, allowed_sign_algs=alg_dict["sign_alg"])
312+
verifier = JWT(
313+
key_jar=_context.keyjar,
314+
allowed_sign_algs=alg_dict["sign_alg"]
315+
)
311316
try:
312317
_payload = verifier.unpack(token)
313318
except JWSException:
@@ -317,8 +322,9 @@ def info(self, token):
317322
raise ToOld("Token has expired")
318323
# All the token metadata
319324
return {
320-
"sid": _payload["sid"],
325+
"sid": _payload.get("sid", ''), # TODO: would sid be there?
321326
# "type": _payload["ttype"],
322327
"exp": _payload["exp"],
328+
"aud": client_id,
323329
"handler": self,
324330
}

tests/test_05_id_token.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,11 +387,20 @@ def test_sign_encrypt_id_token(self):
387387
def test_get_sign_algorithm(self):
388388
client_info = self.endpoint_context.cdb[AREQ["client_id"]]
389389
algs = get_sign_and_encrypt_algorithms(
390-
self.endpoint_context, client_info, "id_token", sign=True
390+
self.endpoint_context, client_info, "id_token", sign=True,
391391
)
392392
# default signing alg
393393
assert algs == {"sign": True, "encrypt": False, "sign_alg": "RS256"}
394394

395+
algs = get_sign_and_encrypt_algorithms(
396+
self.endpoint_context, client_info, "id_token", sign=True, encrypt=True
397+
)
398+
# default signing alg
399+
assert algs == {
400+
'sign': True, 'encrypt': True, 'sign_alg': 'RS256',
401+
'enc_alg': 'RSA-OAEP', 'enc_enc': 'A128CBC-HS256'
402+
}
403+
395404
def test_available_claims(self):
396405
session_id = self._create_session(AREQ)
397406
grant = self.session_manager[session_id]
@@ -542,3 +551,35 @@ def test_client_claims_scopes_and_request_claims_one_match(self):
542551
assert "email" not in res
543552
# Scope -> claims
544553
assert "address" in res
554+
555+
556+
def test_id_token_info(self):
557+
session_id = self._create_session(AREQ)
558+
grant = self.session_manager[session_id]
559+
code = self._mint_code(grant, session_id)
560+
access_token = self._mint_access_token(grant, session_id, code)
561+
562+
id_token = self._mint_id_token(
563+
grant, session_id, token_ref=code, access_token=access_token.value
564+
)
565+
566+
endpoint_context = self.endpoint_context
567+
sman = endpoint_context.session_manager
568+
server_get = sman.token_handler.handler['id_token'].server_get
569+
_info = self.session_manager.token_handler.info(id_token.value)
570+
assert 'sid' in _info
571+
assert 'exp' in _info
572+
assert 'aud' in _info
573+
574+
client_id = AREQ.get('client_id')
575+
_id_token = sman.token_handler.handler['id_token']
576+
_id_token.sign_encrypt(session_id, client_id)
577+
578+
# TODO: we need an authentication event for this id_token for a better coverage
579+
_id_token.payload(session_id)
580+
581+
client_info = endpoint_context.cdb[client_id]
582+
get_sign_and_encrypt_algorithms(
583+
endpoint_context, client_info, payload_type="id_token",
584+
sign=True, encrypt=True
585+
)

tests/test_05_jwt_token.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
"authorization_code": "code",
8787
"access_token": "access_token",
8888
"refresh_token": "refresh_token",
89+
"id_token": "id_token"
8990
}
9091

9192

0 commit comments

Comments
 (0)