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

Commit 9feb0b3

Browse files
committed
Creating cookies with SameSite and HttpOnly.
1 parent 307b1ed commit 9feb0b3

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

src/oidcendpoint/cookie.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,14 +390,17 @@ def delete_cookie(self, cookie_name=None):
390390

391391
return self.create_cookie("", "", cookie_name=cookie_name, kill=True)
392392

393-
def create_cookie(self, value, typ, cookie_name=None, ttl=-1, kill=False):
393+
def create_cookie(self, value, typ, cookie_name=None, ttl=-1, kill=False,
394+
same_site="", http_only=True):
394395
"""
395396
396397
:param value: Part of the cookie payload
397398
:param typ: Type of cookie
398399
:param cookie_name:
399400
:param ttl: Number of minutes before this cookie goes stale
400401
:param kill: Whether the the cookie should expire on arrival
402+
:param same_site:
403+
:param http_only:
401404
:return: A tuple to be added to headers
402405
"""
403406
if kill:
@@ -435,6 +438,8 @@ def create_cookie(self, value, typ, cookie_name=None, ttl=-1, kill=False):
435438
enc_key=self.enc_key,
436439
max_age=ttl,
437440
sign_alg=self.sign_alg,
441+
same_site=same_site,
442+
http_only=http_only,
438443
**c_args
439444
)
440445

@@ -476,6 +481,8 @@ def append_cookie(
476481
path=None,
477482
timestamp="",
478483
max_age=0,
484+
same_site="None",
485+
http_only=True
479486
):
480487
"""
481488
Adds a cookie to a SimpleCookie instance
@@ -490,7 +497,8 @@ def append_cookie(
490497
:param max_age:
491498
:return:
492499
"""
493-
timestamp = str(int(time.time()))
500+
if not timestamp:
501+
timestamp = str(int(time.time()))
494502

495503
# create cookie payload
496504
try:
@@ -508,6 +516,8 @@ def append_cookie(
508516
enc_key=self.enc_key,
509517
max_age=max_age,
510518
sign_alg=self.sign_alg,
519+
same_site=same_site,
520+
http_only=http_only
511521
)
512522

513523
for name, args in content.items():

src/oidcendpoint/oidc/authorization.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,7 @@ def authz_part2(self, user, authn_event, request, **kwargs):
610610
as_unicode(_state),
611611
typ="session",
612612
cookie_name=ec.cookie_name["session_management"],
613+
same_site="None", http_only=False
613614
)
614615

615616
opbs = session_cookie[ec.cookie_name["session_management"]]

tests/test_09_cookie_dealer.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pytest
44
from cryptojwt.jwk.hmac import SYMKey
55
from cryptojwt.key_jar import init_key_jar
6+
67
from oidcendpoint.cookie import CookieDealer
78
from oidcendpoint.cookie import append_cookie
89
from oidcendpoint.cookie import compute_session_state
@@ -174,6 +175,20 @@ def test_mult_cookie(self):
174175
assert _value[0] == "value"
175176
assert _value[2] == "sso"
176177

178+
def test_mult_cookie_same_site(self):
179+
_cookie1 = self.cookie_dealer.create_cookie("value", "sso", same_site="None",
180+
http_only=False)
181+
_cookie = self.cookie_dealer.append_cookie(
182+
_cookie1, "session", "session_state", "session",
183+
)
184+
assert len(_cookie) == 2
185+
_value = self.cookie_dealer.get_cookie_value(_cookie, "session")
186+
assert _value[0] == "session_state"
187+
assert _value[2] == "session"
188+
_value = self.cookie_dealer.get_cookie_value(_cookie, "oidc_op")
189+
assert _value[0] == "value"
190+
assert _value[2] == "sso"
191+
177192

178193
def test_compute_session_state():
179194
hv = compute_session_state(
@@ -285,4 +300,3 @@ def test_cookie_same_site_none():
285300
assert kaka['test']["secure"] is True
286301
assert kaka["test"]["httponly"] is True
287302
assert kaka["test"]["samesite"] is "None"
288-

0 commit comments

Comments
 (0)