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

Commit 5929fde

Browse files
committed
Validity of authn event was a bit to low.
1 parent 28aeab8 commit 5929fde

File tree

3 files changed

+21
-24
lines changed

3 files changed

+21
-24
lines changed

src/oidcendpoint/authn_event.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from oidcmsg.message import Message
44
from oidcmsg.time_util import time_sans_frac
55

6+
DEFAULT_AUTHN_EXPIRES_IN = 3600
67

78
class AuthnEvent(Message):
89
c_param = {
@@ -46,9 +47,7 @@ def create_authn_event(uid, salt, authn_info=None, **kwargs):
4647
try:
4748
args["valid_until"] = kwargs["valid_until"]
4849
except KeyError:
49-
try:
50-
args["valid_until"] = args["authn_time"] + kwargs["expires_in"]
51-
except KeyError:
52-
args["valid_until"] = args["authn_time"] + 3600
50+
_expires_in = kwargs.get("expires_in", DEFAULT_AUTHN_EXPIRES_IN)
51+
args["valid_until"] = args["authn_time"] + _expires_in
5352

5453
return AuthnEvent(**args)

src/oidcendpoint/oidc/authorization.py

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import json
22
import logging
3-
import time
43

54
from cryptojwt import BadSyntax
65
from cryptojwt.jwe.exception import JWEException
76
from cryptojwt.jws.exception import NoSuitableSigningKeys
7+
from cryptojwt.jwt import utc_time_sans_frac
88
from cryptojwt.utils import as_bytes
99
from cryptojwt.utils import as_unicode
1010
from cryptojwt.utils import b64d
@@ -282,7 +282,7 @@ def _do_request_uri(self, request, client_id, endpoint_context, **kwargs):
282282
"enc_enc",
283283
)
284284
# The protected info overwrites the non-protected
285-
for k,v in _ver_request.items():
285+
for k, v in _ver_request.items():
286286
request[k] = v
287287

288288
request[verified_claim_name("request")] = _ver_request
@@ -435,11 +435,11 @@ def setup_auth(self, request, redirect_uri, cinfo, cookie, acr=None, **kwargs):
435435
if "req_user" in kwargs:
436436
sids = self.endpoint_context.sdb.get_sids_by_sub(kwargs["req_user"])
437437
if (
438-
sids
439-
and user
440-
!= self.endpoint_context.sdb.get_authentication_event(
441-
sids[-1]
442-
).uid
438+
sids
439+
and user
440+
!= self.endpoint_context.sdb.get_authentication_event(
441+
sids[-1]
442+
).uid
443443
):
444444
logger.debug("Wanted to be someone else!")
445445
if "prompt" in request and "none" in request["prompt"]:
@@ -451,26 +451,21 @@ def setup_auth(self, request, redirect_uri, cinfo, cookie, acr=None, **kwargs):
451451
else:
452452
return {"function": authn, "args": authn_args}
453453

454+
authn_event = None
454455
if session:
455456
authn_event = session.get('authn_event')
456-
if authn_event is None:
457-
authn_event = create_authn_event(
458-
identity["uid"],
459-
identity.get("salt", ""),
460-
authn_info=authn_class_ref,
461-
time_stamp=_ts,
462-
)
463-
else:
457+
458+
if authn_event is None:
464459
authn_event = create_authn_event(
465460
identity["uid"],
466461
identity.get("salt", ""),
467462
authn_info=authn_class_ref,
468463
time_stamp=_ts,
469464
)
470465

471-
if "valid_until" in authn_event:
472-
vu = time.time() + authn.kwargs.get("expires_in", 0.0)
473-
authn_event["valid_until"] = vu
466+
_exp_in = authn.kwargs.get("expires_in")
467+
if _exp_in and "valid_until" in authn_event:
468+
authn_event["valid_until"] = utc_time_sans_frac() + _exp_in
474469

475470
return {"authn_event": authn_event, "identity": identity, "user": user}
476471

src/oidcendpoint/oidc/userinfo.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
from cryptojwt.exception import MissingValue
55
from cryptojwt.jwt import JWT
6+
from cryptojwt.jwt import utc_time_sans_frac
67
from oidcmsg import oidc
78
from oidcmsg.message import Message
89
from oidcmsg.oauth2 import ResponseMessage
9-
from oidcmsg.time_util import time_sans_frac
1010

1111
from oidcendpoint.endpoint import Endpoint
1212
from oidcendpoint.userinfo import collect_user_info
@@ -107,9 +107,12 @@ def process_request(self, request=None, **kwargs):
107107

108108
allowed = True
109109
# if the authenticate is still active or offline_access is granted.
110-
if session["authn_event"]["valid_until"] > time_sans_frac():
110+
if session["authn_event"]["valid_until"] > utc_time_sans_frac():
111111
pass
112112
else:
113+
logger.debug("authentication not valid: {} > {}".format(
114+
session["authn_event"]["valid_until"], utc_time_sans_frac()
115+
))
113116
allowed = False
114117

115118
# This has to be made more fine grained.

0 commit comments

Comments
 (0)