@@ -1644,14 +1644,68 @@ def test_do_logout_signed_redirect(self):
1644
1644
loc = info ["headers" ][0 ][1 ]
1645
1645
_ , _ , _ , _ , qs , _ = parse .urlparse (loc )
1646
1646
qs = parse .parse_qs (qs )
1647
- assert _leq (qs .keys (),
1648
- ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
1647
+ assert _leq (qs .keys (), ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
1649
1648
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 )
1652
1651
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
+
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
+ )
1655
1709
1656
1710
def test_do_logout_post (self ):
1657
1711
# information about the user from an IdP
@@ -3245,14 +3299,18 @@ def test_do_logout_signed_redirect(self):
3245
3299
loc = info ["headers" ][0 ][1 ]
3246
3300
_ , _ , _ , _ , qs , _ = parse .urlparse (loc )
3247
3301
qs = parse .parse_qs (qs )
3248
- assert _leq (qs .keys (),
3249
- ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
3302
+ assert _leq (qs .keys (), ['SigAlg' , 'SAMLRequest' , 'RelayState' , 'Signature' ])
3250
3303
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 )
3253
3306
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
+ )
3256
3314
3257
3315
def test_do_logout_post (self ):
3258
3316
# information about the user from an IdP
0 commit comments