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

Commit e993048

Browse files
committed
Carry token_type to the token minting.
1 parent 5a13dbf commit e993048

4 files changed

Lines changed: 14 additions & 1 deletion

File tree

src/oidcop/oauth2/token.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def _mint_token(
5454
client_id: str,
5555
based_on: Optional[SessionToken] = None,
5656
token_args: Optional[dict] = None,
57+
token_type: Optional[str] = ""
5758
) -> SessionToken:
5859
_context = self.endpoint.server_get("endpoint_context")
5960
_mngr = _context.session_manager
@@ -79,6 +80,7 @@ def _mint_token(
7980
token_handler=_mngr.token_handler[token_class],
8081
based_on=based_on,
8182
usage_rules=usage_rules,
83+
token_type=token_type,
8284
**_args,
8385
)
8486

src/oidcop/oidc/token.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ def process_request(self, req: Union[Message, dict], **kwargs):
9494
session_id=_session_info["session_id"],
9595
client_id=_session_info["client_id"],
9696
based_on=_based_on,
97+
token_type=token_type,
9798
)
9899
except MintingNotAllowed as err:
99100
logger.warning(err)
@@ -207,6 +208,7 @@ def process_request(self, req: Union[Message, dict], **kwargs):
207208
session_id=_session_info["session_id"],
208209
client_id=_session_info["client_id"],
209210
based_on=token,
211+
token_type=token_type
210212
)
211213

212214
_resp = {

src/oidcop/session/grant.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def __init__(
152152
self.issued_token = issued_token or []
153153
self.id = uuid1().hex
154154
self.sub = sub
155-
self.extra = {}
155+
self.extra = extra or {}
156156

157157
if token_map is None:
158158
self.token_map = TOKEN_MAP
@@ -219,6 +219,7 @@ def mint_token(
219219
based_on: Optional[SessionToken] = None,
220220
usage_rules: Optional[dict] = None,
221221
scope: Optional[list] = None,
222+
token_type: Optional[str] = "",
222223
**kwargs,
223224
) -> Optional[SessionToken]:
224225
"""
@@ -256,6 +257,9 @@ def mint_token(
256257
class_args = kwargs
257258
handler_args = {}
258259

260+
if token_class == "access_token" and token_type:
261+
class_args["token_type"] = token_type
262+
259263
if _class:
260264
item = _class(
261265
token_class=token_class,

tests/test_60_dpop.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,3 +264,8 @@ def test_process_request(self):
264264
_payload = jws.jwt.payload()
265265
assert "cnf" in _payload
266266
assert _payload["cnf"]["jkt"] == _req["dpop_jkt"]
267+
268+
# Make sure DPoP also is in the session access token instance.
269+
_session_info = self.session_manager.get_session_info_by_token(access_token)
270+
_token = self.session_manager.find_token(_session_info["session_id"], access_token)
271+
assert _token.token_type == "DPoP"

0 commit comments

Comments
 (0)