@@ -1644,14 +1644,68 @@ def test_do_logout_signed_redirect(self):
16441644 loc = info ["headers" ][0 ][1 ]
16451645 _ , _ , _ , _ , qs , _ = parse .urlparse (loc )
16461646 qs = parse .parse_qs (qs )
1647- assert _leq (qs .keys (),
1648- ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
1647+ assert _leq (qs .keys (), ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
16491648
1650- assert verify_redirect_signature ( list_values2simpletons (qs ),
1651- client .sec .sec_backend )
1649+ qs_simple = list_values2simpletons (qs )
1650+ assert verify_redirect_signature ( qs_simple , client .sec .sec_backend )
16521651
1653- res = self .server .parse_logout_request (qs ["SAMLRequest" ][0 ],
1654- BINDING_HTTP_REDIRECT )
1652+ res = self .server .parse_logout_request (
1653+ qs_simple ["SAMLRequest" ],
1654+ BINDING_HTTP_REDIRECT ,
1655+ relay_state = qs_simple ['RelayState' ],
1656+ sigalg = qs_simple ['SigAlg' ],
1657+ signature = qs_simple ['Signature' ],
1658+ )
1659+
1660+ def test_do_logout_signed_redirect_invalid (self ):
1661+ conf = config .SPConfig ()
1662+ conf .load_file ("sp_slo_redirect_conf" )
1663+ client = Saml2Client (conf )
1664+
1665+ session_info = {
1666+ "name_id" : nid ,
1667+ "issuer" : "urn:mace:example.com:saml:roland:idp" ,
1668+ "not_on_or_after" : in_a_while (minutes = 15 ),
1669+ "ava" : {
1670+ "givenName" : "Anders" ,
1671+ "sn" : "Andersson" ,
1672+ "mail" : "anders.andersson@example.com"
1673+ }
1674+ }
1675+ client .users .add_information_about_person (session_info )
1676+ entity_ids = client .users .issuers_of_info (nid )
1677+
1678+ resp = client .do_logout (
1679+ nid ,
1680+ entity_ids ,
1681+ "Tired" ,
1682+ in_a_while (minutes = 5 ),
1683+ sign = True ,
1684+ expected_binding = BINDING_HTTP_REDIRECT ,
1685+ )
1686+
1687+ binding , info = resp [entity_ids [0 ]]
1688+ loc = info ["headers" ][0 ][1 ]
1689+ _ , _ , _ , _ , qs , _ = parse .urlparse (loc )
1690+ qs = parse .parse_qs (qs )
1691+ qs_simple = list_values2simpletons (qs )
1692+
1693+ invalid_signature = 'ZEdMZUQ3SjBjQ2ozWmlGaHhyV3JZSzNkTWhQWU02bjA0dzVNeUd1UWgrVDhnYm1oc1R1TTFjPQo='
1694+ qs_simple_invalid = {
1695+ ** qs_simple ,
1696+ 'Signature' : invalid_signature ,
1697+ }
1698+ assert not verify_redirect_signature (qs_simple_invalid , client .sec .sec_backend )
1699+
1700+ self .server .config .setattr ("idp" , "want_authn_requests_signed" , True )
1701+ with raises (IncorrectlySigned ):
1702+ res = self .server .parse_logout_request (
1703+ qs_simple ["SAMLRequest" ],
1704+ BINDING_HTTP_REDIRECT ,
1705+ relay_state = qs_simple ['RelayState' ],
1706+ sigalg = qs_simple ['SigAlg' ],
1707+ signature = invalid_signature ,
1708+ )
16551709
16561710 def test_do_logout_post (self ):
16571711 # information about the user from an IdP
@@ -3245,14 +3299,18 @@ def test_do_logout_signed_redirect(self):
32453299 loc = info ["headers" ][0 ][1 ]
32463300 _ , _ , _ , _ , qs , _ = parse .urlparse (loc )
32473301 qs = parse .parse_qs (qs )
3248- assert _leq (qs .keys (),
3249- ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
3302+ assert _leq (qs .keys (), ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
32503303
3251- assert verify_redirect_signature ( list_values2simpletons (qs ),
3252- client .sec .sec_backend )
3304+ qs_simple = list_values2simpletons (qs )
3305+ assert verify_redirect_signature ( qs_simple , client .sec .sec_backend )
32533306
3254- res = self .server .parse_logout_request (qs ["SAMLRequest" ][0 ],
3255- BINDING_HTTP_REDIRECT )
3307+ res = self .server .parse_logout_request (
3308+ qs_simple ["SAMLRequest" ],
3309+ BINDING_HTTP_REDIRECT ,
3310+ relay_state = qs_simple ['RelayState' ],
3311+ sigalg = qs_simple ['SigAlg' ],
3312+ signature = qs_simple ['Signature' ],
3313+ )
32563314
32573315 def test_do_logout_post (self ):
32583316 # information about the user from an IdP
0 commit comments