|
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