|
1 | 1 | import os
|
2 | 2 |
|
3 | 3 | import pytest
|
4 |
| - |
5 |
| -from cryptojwt.exception import IssuerNotFound |
6 | 4 | from cryptojwt.jws.exception import NoSuitableSigningKeys
|
7 | 5 | from cryptojwt.jwt import JWT
|
8 |
| -from cryptojwt.jwt import VerificationError |
9 | 6 | from cryptojwt.jwt import pick_key
|
10 | 7 | from cryptojwt.jwt import utc_time_sans_frac
|
| 8 | +from cryptojwt.jwt import VerificationError |
11 | 9 | from cryptojwt.key_bundle import KeyBundle
|
12 |
| -from cryptojwt.key_jar import KeyJar |
13 | 10 | from cryptojwt.key_jar import init_key_jar
|
| 11 | +from cryptojwt.key_jar import KeyJar |
14 | 12 |
|
15 | 13 | __author__ = "Roland Hedberg"
|
16 | 14 |
|
@@ -136,19 +134,6 @@ def test_jwt_pack_and_unpack_max_lifetime_exceeded():
|
136 | 134 | _ = bob.unpack(_jwt)
|
137 | 135 |
|
138 | 136 |
|
139 |
| -def test_jwt_pack_and_unpack_max_lifetime_exceeded(): |
140 |
| - lifetime = 3600 |
141 |
| - alice = JWT(key_jar=ALICE_KEY_JAR, iss=ALICE, sign_alg="RS256", lifetime=lifetime) |
142 |
| - payload = {"sub": "sub"} |
143 |
| - _jwt = alice.pack(payload=payload) |
144 |
| - |
145 |
| - bob = JWT( |
146 |
| - key_jar=BOB_KEY_JAR, iss=BOB, allowed_sign_algs=["RS256"], allowed_max_lifetime=lifetime - 1 |
147 |
| - ) |
148 |
| - with pytest.raises(VerificationError): |
149 |
| - _ = bob.unpack(_jwt) |
150 |
| - |
151 |
| - |
152 | 137 | def test_jwt_pack_and_unpack_timestamp():
|
153 | 138 | lifetime = 3600
|
154 | 139 | alice = JWT(key_jar=ALICE_KEY_JAR, iss=ALICE, sign_alg="RS256", lifetime=lifetime)
|
@@ -255,9 +240,11 @@ def test_with_jti():
|
255 | 240 |
|
256 | 241 |
|
257 | 242 | class DummyMsg(object):
|
| 243 | + |
258 | 244 | def __init__(self, **kwargs):
|
259 | 245 | for key, val in kwargs.items():
|
260 | 246 | setattr(self, key, val)
|
| 247 | + self.jws_headers = {} |
261 | 248 |
|
262 | 249 | def verify(self, **kwargs):
|
263 | 250 | return True
|
@@ -322,12 +309,26 @@ def test_eddsa_jwt():
|
322 | 309 | ]
|
323 | 310 | }
|
324 | 311 | JWT_TEST = (
|
325 |
| - "eyJraWQiOiItMTkwOTU3MjI1NyIsImFsZyI6IkVkRFNBIn0." |
326 |
| - + "eyJqdGkiOiIyMjkxNmYzYy05MDkzLTQ4MTMtODM5Ny1mMTBlNmI3MDRiNjgiLCJkZWxlZ2F0aW9uSWQiOiJiNGFlNDdhNy02MjVhLTQ2MzAtOTcyNy00NTc2NGE3MTJjY2UiLCJleHAiOjE2NTUyNzkxMDksIm5iZiI6MTY1NTI3ODgwOSwic2NvcGUiOiJyZWFkIG9wZW5pZCIsImlzcyI6Imh0dHBzOi8vaWRzdnIuZXhhbXBsZS5jb20iLCJzdWIiOiJ1c2VybmFtZSIsImF1ZCI6ImFwaS5leGFtcGxlLmNvbSIsImlhdCI6MTY1NTI3ODgwOSwicHVycG9zZSI6ImFjY2Vzc190b2tlbiJ9." |
327 |
| - + "rjeE8D_e4RYzgvpu-nOwwx7PWMiZyDZwkwO6RiHR5t8g4JqqVokUKQt-oST1s45wubacfeDSFogOrIhe3UHDAg" |
| 312 | + "eyJraWQiOiItMTkwOTU3MjI1NyIsImFsZyI6IkVkRFNBIn0." |
| 313 | + + "eyJqdGkiOiIyMjkxNmYzYy05MDkzLTQ4MTMtODM5Ny1mMTBlNmI3MDRiNjgiLCJkZWxlZ2F0aW9uSWQiOiJiNGFlNDdhNy02MjVhLTQ2MzAtOTcyNy00NTc2NGE3MTJjY2UiLCJleHAiOjE2NTUyNzkxMDksIm5iZiI6MTY1NTI3ODgwOSwic2NvcGUiOiJyZWFkIG9wZW5pZCIsImlzcyI6Imh0dHBzOi8vaWRzdnIuZXhhbXBsZS5jb20iLCJzdWIiOiJ1c2VybmFtZSIsImF1ZCI6ImFwaS5leGFtcGxlLmNvbSIsImlhdCI6MTY1NTI3ODgwOSwicHVycG9zZSI6ImFjY2Vzc190b2tlbiJ9." |
| 314 | + + "rjeE8D_e4RYzgvpu-nOwwx7PWMiZyDZwkwO6RiHR5t8g4JqqVokUKQt-oST1s45wubacfeDSFogOrIhe3UHDAg" |
328 | 315 | )
|
329 | 316 | ISSUER = "https://idsvr.example.com"
|
330 | 317 | kj = KeyJar()
|
331 | 318 | kj.add_kb(ISSUER, KeyBundle(JWKS_DICT))
|
332 | 319 | jwt = JWT(key_jar=kj)
|
333 | 320 | _ = jwt.unpack(JWT_TEST, timestamp=1655278809)
|
| 321 | + |
| 322 | + |
| 323 | +def test_extra_headers(): |
| 324 | + _kj = KeyJar() |
| 325 | + _kj.add_symmetric(ALICE, "hemligt ordsprak", usage=["sig"]) |
| 326 | + |
| 327 | + alice = JWT(key_jar=_kj, iss=ALICE, sign_alg="HS256") |
| 328 | + payload = {"sub": "sub2"} |
| 329 | + _jwt = alice.pack(payload=payload, jws_headers={"xtra": "header", "typ": "dummy"}) |
| 330 | + |
| 331 | + bob = JWT(key_jar=_kj, iss=BOB, sign_alg="HS256", typ2msg_cls={"dummy": DummyMsg}) |
| 332 | + info = bob.unpack(_jwt) |
| 333 | + assert isinstance(info, DummyMsg) |
| 334 | + assert set(info.jws_headers.keys()) == {'xtra', 'typ', 'alg', 'kid'} |
0 commit comments