1+ import json
12
23from jose import jws
34from jose .constants import ALGORITHMS
@@ -12,7 +13,7 @@ def payload():
1213 return payload
1314
1415
15- class TestJWS :
16+ class TestJWS ( object ) :
1617
1718 def test_unicode_token (self ):
1819 token = u'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhIjoiYiJ9.jiMyrsmD8AoHWeQgmxZ5yq8z0lXS67_QGs52AzC8Ru8'
@@ -48,7 +49,7 @@ def test_invalid_key(self, payload):
4849 jws .sign (payload , 'secret' , algorithm = 'RS256' )
4950
5051
51- class TestHMAC :
52+ class TestHMAC ( object ) :
5253
5354 def testHMAC256 (self , payload ):
5455 token = jws .sign (payload , 'secret' , algorithm = ALGORITHMS .HS256 )
@@ -160,8 +161,55 @@ def test_add_headers(self, payload):
160161Ks3IHH7tVltM6NsRk3jNdVMCAwEAAQ==
161162-----END PUBLIC KEY-----"""
162163
163-
164- class TestRSA :
164+ @pytest .fixture
165+ def jwk_set ():
166+ return {u'keys' : [{u'alg' : u'RS256' ,
167+ u'e' : u'AQAB' ,
168+ u'kid' : u'40aa42edac0614d7ca3f57f97ee866cdfba3b61a' ,
169+ u'kty' : u'RSA' ,
170+ u'n' : u'6lm9AEGLPFpVqnfeVFuTIZsj7vz_kxla6uW1WWtosM_MtIjXkyyiSolxiSOs3bzG66iVm71023QyOzKYFbio0hI-yZauG3g9nH-zb_AHScsjAKagHtrHmTdtq0JcNkQnAaaUwxVbjwMlYAcOh87W5jWj_MAcPvc-qjy8-WJ81UgoOUZNiKByuF4-9igxKZeskGRXuTPX64kWGBmKl-tM7VnCGMKoK3m92NPrktfBoNN_EGGthNfQsKFUdQFJFtpMuiXp9Gib7dcMGabxcG2GUl-PU086kPUyUdUYiMN2auKSOxSUZgDjT7DcI8Sn8kdQ0-tImaHi54JNa1PNNdKRpw' ,
171+ u'use' : u'sig' },
172+ {u'alg' : u'RS256' ,
173+ u'e' : u'AQAB' ,
174+ u'kid' : u'8fbbeea40332d2c0d27e37e1904af29b64594e57' ,
175+ u'kty' : u'RSA' ,
176+ u'n' : u'z7h6_rt35-j6NV2iQvYIuR3xvsxmEImgMl8dc8CFl4SzEWrry3QILajKxQZA9YYYfXIcZUG_6R6AghVMJetNIl2AhCoEr3RQjjNsm9PE6h5p2kQ-zIveFeb__4oIkVihYtxtoYBSdVj69nXLUAJP2bxPfU8RDp5X7hT62pKR05H8QLxH8siIQ5qR2LGFw_dJcitAVRRQofuaj_9u0CLZBfinqyRkBc7a0zi7pBxtEiIbn9sRr8Kkb_Boap6BHbnLS-YFBVarcgFBbifRf7NlK5dqE9z4OUb-dx8wCMRIPVAx_hV4Qx2anTgp1sDA6V4vd4NaCOZX-mSctNZqQmKtNw' ,
177+ u'use' : u'sig' },
178+ {u'alg' : u'RS256' ,
179+ u'e' : u'AQAB' ,
180+ u'kid' : u'6758b0b8eb341e90454860432d6a1648bf4de03b' ,
181+ u'kty' : u'RSA' ,
182+ u'n' : u'5K0rYaA7xtqSe1nFn_nCA10uUXY81NcohMeFsYLbBlx_NdpsmbpgtXJ6ektYR7rUdtMMLu2IONlNhkWlx-lge91okyacUrWHP88PycilUE-RnyVjbPEm3seR0VefgALfN4y_e77ljq2F7W2_kbUkTvDzriDIWvQT0WwVF5FIOBydfDDs92S-queaKgLBwt50SXJCZryLew5ODrwVsFGI4Et6MLqjS-cgWpCNwzcRqjBRsse6DXnex_zSRII4ODzKIfX4qdFBKZHO_BkTsK9DNkUayrr9cz8rFRK6TEH6XTVabgsyd6LP6PTxhpiII_pTYRSWk7CGMnm2nO0dKxzaFQ' ,
183+ u'use' : u'sig' }]}
184+
185+ google_id_token = (
186+ 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjhmYmJlZWE0MDMzMmQyYzBkMjdlMzdlMTkwN'
187+ 'GFmMjliNjQ1OTRlNTcifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5'
188+ 'jb20iLCJhdF9oYXNoIjoiUUY5RnRjcHlmbUFBanJuMHVyeUQ5dyIsImF1ZCI6IjQw'
189+ 'NzQwODcxODE5Mi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInN1YiI6IjEwN'
190+ 'zkzMjQxNjk2NTIwMzIzNDA3NiIsImF6cCI6IjQwNzQwODcxODE5Mi5hcHBzLmdvb2'
191+ 'dsZXVzZXJjb250ZW50LmNvbSIsImlhdCI6MTQ2ODYyMjQ4MCwiZXhwIjoxNDY4NjI'
192+ '2MDgwfQ.Nz6VREh7smvfVRWNHlbKZ6W_DX57akRUGrDTcns06ndAwrslwUlBeFsWY'
193+ 'RLon_tDw0QCeQCGvw7l1AT440UQBRP-mtqK_2Yny2JmIQ7Ll6UAIHRhXOD1uj9w5v'
194+ 'X0jyI1MbjDtODeDWWn_9EDJRBd4xmwKhAONuWodTgSi7qGe1UVmzseFNNkKdoo54d'
195+ 'XhCJiyiRAMnWB_FQDveRJghche131pd9O_E4Wj6hf_zCcMTaDaLDOmElcQe-WsKWA'
196+ 'A3YwHFEWOLO_7x6u4uGmhItPGH7zsOTzYxPYhZMSZusgVg9fbE1kSlHVSyQrcp_rR'
197+ 'WNz7vOIbvIlBR9Jrq5MIqbkkg'
198+ )
199+
200+ class TestRSA (object ):
201+
202+ def test_jwk_set (self , jwk_set ):
203+ # Would raise a JWSError if validation failed.
204+ payload = jws .verify (google_id_token , jwk_set , ALGORITHMS .RS256 )
205+ iss = json .loads (payload .decode ('utf-8' ))['iss' ]
206+ assert iss == "https://accounts.google.com"
207+
208+ def test_jwk_set_failure (self , jwk_set ):
209+ # Remove the key that was used to sign this token.
210+ del jwk_set ['keys' ][1 ]
211+ with pytest .raises (JWSError ):
212+ payload = jws .verify (google_id_token , jwk_set , ALGORITHMS .RS256 )
165213
166214 def test_RSA256 (self , payload ):
167215 token = jws .sign (payload , rsa_private_key , algorithm = ALGORITHMS .RS256 )
@@ -201,7 +249,7 @@ def test_wrong_key(self, payload):
201249-----END PUBLIC KEY-----"""
202250
203251
204- class TestEC :
252+ class TestEC ( object ) :
205253
206254 def test_EC256 (self , payload ):
207255 token = jws .sign (payload , ec_private_key , algorithm = ALGORITHMS .ES256 )
@@ -221,7 +269,7 @@ def test_wrong_alg(self, payload):
221269 jws .verify (token , rsa_public_key , ALGORITHMS .ES384 )
222270
223271
224- class TestLoad :
272+ class TestLoad ( object ) :
225273
226274 def test_header_not_mapping (self ):
227275 token = 'WyJ0ZXN0Il0.eyJhIjoiYiJ9.jiMyrsmD8AoHWeQgmxZ5yq8z0lXS67_QGs52AzC8Ru8'
0 commit comments