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

Commit bef7365

Browse files
authored
Merge pull request #108 from IdentityPython/clear_txt_sid
Clear txt sid
2 parents e895053 + beaa4b3 commit bef7365

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

src/oidcop/session/manager.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def __init__(
7676
self, handler: TokenHandler, conf: Optional[dict] = None,
7777
sub_func: Optional[dict] = None,
7878
):
79+
super(SessionManager, self).__init__()
7980
self.conf = conf or {}
8081

8182
# these won't change runtime
@@ -451,6 +452,13 @@ def get_session_info(
451452

452453
return res
453454

455+
def _compatible_sid(self, sid):
456+
# To be backward compatible is this an old time sid
457+
p = self.unpack_session_key(sid)
458+
if len(p) == 3:
459+
sid = self.encrypted_session_id(*p)
460+
return sid
461+
454462
def get_session_info_by_token(
455463
self,
456464
token_value: str,
@@ -467,6 +475,9 @@ def get_session_info_by_token(
467475
if not sid:
468476
raise WrongTokenClass
469477

478+
# To be backward compatible is this an old time sid
479+
sid = self._compatible_sid(sid)
480+
470481
return self.get_session_info(
471482
sid,
472483
user_session_info=user_session_info,
@@ -478,7 +489,8 @@ def get_session_info_by_token(
478489

479490
def get_session_id_by_token(self, token_value: str) -> str:
480491
_token_info = self.token_handler.info(token_value)
481-
return _token_info["sid"]
492+
sid = _token_info.get("sid")
493+
return self._compatible_sid(sid)
482494

483495
def add_grant(self, user_id: str, client_id: str, **kwargs) -> Grant:
484496
"""

tests/test_35_oidc_token_endpoint.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
import json
33
import os
44

5-
import pytest
65
from cryptojwt import JWT
76
from cryptojwt.key_jar import build_keyjar
87
from oidcmsg.oidc import AccessTokenRequest
98
from oidcmsg.oidc import AuthorizationRequest
109
from oidcmsg.oidc import RefreshAccessTokenRequest
1110
from oidcmsg.oidc import TokenErrorResponse
1211
from oidcmsg.time_util import utc_time_sans_frac
12+
import pytest
1313

1414
from oidcop import JWT_BEARER
1515
from oidcop.authn_event import create_authn_event
@@ -813,6 +813,25 @@ def test_old_default_token(self):
813813
_info = self.session_manager.token_handler.info(_old_type_value)
814814
assert _info["token_class"] == "authorization_code"
815815

816+
def test_old_default_token_sid_unencrypted(self):
817+
session_id = self._create_session(AUTH_REQ)
818+
grant = self.session_manager[session_id]
819+
code = self._mint_code(grant, AUTH_REQ["client_id"])
820+
821+
# pack and unpack
822+
_handler = self.session_manager.token_handler.handler["authorization_code"]
823+
_res = dict(zip(["_id", "token_class", "sid", "exp"], _handler.split_token(code.value)))
824+
825+
_clear_txt_sid = self.session_manager.session_key(
826+
*self.session_manager.decrypt_session_id(_res["sid"]))
827+
828+
_old_type_token = base64.b64encode(
829+
_handler.crypt.encrypt(lv_pack(_res["_id"], "A", _clear_txt_sid, _res["exp"]).encode())
830+
).decode("utf-8")
831+
832+
_session_info = self.session_manager.get_session_info_by_token(_old_type_token)
833+
assert _session_info["user_id"] == "diana"
834+
816835
def test_old_jwt_token(self):
817836
session_id = self._create_session(AUTH_REQ)
818837
grant = self.session_manager[session_id]

0 commit comments

Comments
 (0)