authentik.providers.saml.tests.test_logout_request_parser
logout request tests
1"""logout request tests""" 2 3from django.test import TestCase 4 5from authentik.blueprints.tests import apply_blueprint 6from authentik.common.saml.constants import SAML_NAME_ID_FORMAT_TRANSIENT 7from authentik.core.tests.utils import create_test_cert, create_test_flow 8from authentik.providers.saml.models import SAMLPropertyMapping, SAMLProvider 9from authentik.providers.saml.processors.logout_request_parser import LogoutRequestParser 10from authentik.sources.saml.models import SAMLSource 11 12GET_LOGOUT_REQUEST = ( 13 "lJLNauMwEMdfRejuSJbtEIvYsBAWDNlltyk99DaxJ41AllzNGNq3L3Z7CD0EehJo5vf/ENoTjH6yx/gSZ37A1xmJxdvo" 14 "A9ll0sg5BRuBHNkAI5Ll3p5+/Tlas9EWiDCxi0HeINN9ZkqRYx+9FN2hkW7IDEJ+1vllWxfbAvq6wmKAEvKq1PW5HnbY" 15 "V6aqy1KKJ0zkYmik2WgpOqIZu0AMgRtptDGZNpnJH01uC2PL7UbvzLMUByR2AXglr8yTVcrHHvw1Ettaa61gmrzr1xW1" 16 "VFCMxIp8VAkHl7BnJdv1pezqmsTvmEbg+02XGzdkl3XVYmDH77JdVLJFP6Npr240vwz+wojdQSzH/xm8uzhMjbylpDj9" 17 "uzv+eThOEMhhYKnaz1DfvkT7EQAA//8=" 18) 19POST_LOGOUT_REQUEST = ( 20 "PHNhbWxwOkxvZ291dFJlcXVlc3QgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvb" 21 "iIgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgSUQ9ImlkLWI4ZjRmZDUxZW" 22 "Q0MTA2ZjFlNzgyYjk1ZDUxZDlhZDNmMzg1ZTU4MTYiIFZlcnNpb249IjIuMCIgSXNzdWVJbnN0YW50PSIyMDIyLTAyLTI" 23 "xVDIyOjUwOjMzLjk5OVoiIERlc3RpbmF0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwMDAvYXBwbGljYXRpb24vc2FtbC90" 24 "ZXN0L3Nsby9wb3N0LyI+PHNhbWw6SXNzdWVyIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZ" 25 "C1mb3JtYXQ6ZW50aXR5Ij5zYW1sLXRlc3Qtc3A8L3NhbWw6SXNzdWVyPjxzYW1sOk5hbWVJRCBOYW1lUXVhbGlmaWVyPS" 26 "JzYW1sLXRlc3Qtc3AiIFNQTmFtZVF1YWxpZmllcj0ic2FtbC10ZXN0LXNwIiBGb3JtYXQ9InVybjpvYXNpczpuYW1lczp" 27 "0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnRyYW5zaWVudCIvPjwvc2FtbHA6TG9nb3V0UmVxdWVzdD4=" 28) 29 30 31class TestLogoutRequest(TestCase): 32 """Test LogoutRequest parser""" 33 34 @apply_blueprint("system/providers-saml.yaml") 35 def setUp(self): 36 cert = create_test_cert() 37 self.provider: SAMLProvider = SAMLProvider.objects.create( 38 authorization_flow=create_test_flow(), 39 acs_url="http://testserver/source/saml/provider/acs/", 40 signing_kp=cert, 41 verification_kp=cert, 42 ) 43 self.provider.property_mappings.set(SAMLPropertyMapping.objects.all()) 44 self.provider.save() 45 self.source = SAMLSource.objects.create( 46 slug="provider", 47 issuer="authentik", 48 pre_authentication_flow=create_test_flow(), 49 signing_kp=cert, 50 ) 51 52 def test_static_get(self): 53 """Test static LogoutRequest""" 54 request = LogoutRequestParser(self.provider).parse_detached(GET_LOGOUT_REQUEST) 55 self.assertEqual(request.id, "id-2ea1b01f69363ac95e3da4a15409b9d8ec525944") 56 self.assertEqual(request.issuer, "saml-test-sp") 57 # The GET request has an empty NameID element with transient format 58 self.assertIsNone(request.name_id) # Empty NameID element returns None 59 self.assertEqual(request.name_id_format, SAML_NAME_ID_FORMAT_TRANSIENT) 60 61 def test_static_post(self): 62 """Test static LogoutRequest""" 63 request = LogoutRequestParser(self.provider).parse(POST_LOGOUT_REQUEST) 64 self.assertEqual(request.id, "id-b8f4fd51ed4106f1e782b95d51d9ad3f385e5816") 65 self.assertEqual(request.issuer, "saml-test-sp") 66 # The POST request has an empty NameID element with transient format 67 self.assertIsNone(request.name_id) # Empty NameID element returns None 68 self.assertEqual(request.name_id_format, SAML_NAME_ID_FORMAT_TRANSIENT)
GET_LOGOUT_REQUEST =
'lJLNauMwEMdfRejuSJbtEIvYsBAWDNlltyk99DaxJ41AllzNGNq3L3Z7CD0EehJo5vf/ENoTjH6yx/gSZ37A1xmJxdvoA9ll0sg5BRuBHNkAI5Ll3p5+/Tlas9EWiDCxi0HeINN9ZkqRYx+9FN2hkW7IDEJ+1vllWxfbAvq6wmKAEvKq1PW5HnbYV6aqy1KKJ0zkYmik2WgpOqIZu0AMgRtptDGZNpnJH01uC2PL7UbvzLMUByR2AXglr8yTVcrHHvw1Ettaa61gmrzr1xW1VFCMxIp8VAkHl7BnJdv1pezqmsTvmEbg+02XGzdkl3XVYmDH77JdVLJFP6Npr240vwz+wojdQSzH/xm8uzhMjbylpDj9uzv+eThOEMhhYKnaz1DfvkT7EQAA//8='
POST_LOGOUT_REQUEST =
'PHNhbWxwOkxvZ291dFJlcXVlc3QgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgSUQ9ImlkLWI4ZjRmZDUxZWQ0MTA2ZjFlNzgyYjk1ZDUxZDlhZDNmMzg1ZTU4MTYiIFZlcnNpb249IjIuMCIgSXNzdWVJbnN0YW50PSIyMDIyLTAyLTIxVDIyOjUwOjMzLjk5OVoiIERlc3RpbmF0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwMDAvYXBwbGljYXRpb24vc2FtbC90ZXN0L3Nsby9wb3N0LyI+PHNhbWw6SXNzdWVyIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6ZW50aXR5Ij5zYW1sLXRlc3Qtc3A8L3NhbWw6SXNzdWVyPjxzYW1sOk5hbWVJRCBOYW1lUXVhbGlmaWVyPSJzYW1sLXRlc3Qtc3AiIFNQTmFtZVF1YWxpZmllcj0ic2FtbC10ZXN0LXNwIiBGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnRyYW5zaWVudCIvPjwvc2FtbHA6TG9nb3V0UmVxdWVzdD4='
class
TestLogoutRequest(django.test.testcases.TestCase):
32class TestLogoutRequest(TestCase): 33 """Test LogoutRequest parser""" 34 35 @apply_blueprint("system/providers-saml.yaml") 36 def setUp(self): 37 cert = create_test_cert() 38 self.provider: SAMLProvider = SAMLProvider.objects.create( 39 authorization_flow=create_test_flow(), 40 acs_url="http://testserver/source/saml/provider/acs/", 41 signing_kp=cert, 42 verification_kp=cert, 43 ) 44 self.provider.property_mappings.set(SAMLPropertyMapping.objects.all()) 45 self.provider.save() 46 self.source = SAMLSource.objects.create( 47 slug="provider", 48 issuer="authentik", 49 pre_authentication_flow=create_test_flow(), 50 signing_kp=cert, 51 ) 52 53 def test_static_get(self): 54 """Test static LogoutRequest""" 55 request = LogoutRequestParser(self.provider).parse_detached(GET_LOGOUT_REQUEST) 56 self.assertEqual(request.id, "id-2ea1b01f69363ac95e3da4a15409b9d8ec525944") 57 self.assertEqual(request.issuer, "saml-test-sp") 58 # The GET request has an empty NameID element with transient format 59 self.assertIsNone(request.name_id) # Empty NameID element returns None 60 self.assertEqual(request.name_id_format, SAML_NAME_ID_FORMAT_TRANSIENT) 61 62 def test_static_post(self): 63 """Test static LogoutRequest""" 64 request = LogoutRequestParser(self.provider).parse(POST_LOGOUT_REQUEST) 65 self.assertEqual(request.id, "id-b8f4fd51ed4106f1e782b95d51d9ad3f385e5816") 66 self.assertEqual(request.issuer, "saml-test-sp") 67 # The POST request has an empty NameID element with transient format 68 self.assertIsNone(request.name_id) # Empty NameID element returns None 69 self.assertEqual(request.name_id_format, SAML_NAME_ID_FORMAT_TRANSIENT)
Test LogoutRequest parser
@apply_blueprint('system/providers-saml.yaml')
def
setUp(self):
35 @apply_blueprint("system/providers-saml.yaml") 36 def setUp(self): 37 cert = create_test_cert() 38 self.provider: SAMLProvider = SAMLProvider.objects.create( 39 authorization_flow=create_test_flow(), 40 acs_url="http://testserver/source/saml/provider/acs/", 41 signing_kp=cert, 42 verification_kp=cert, 43 ) 44 self.provider.property_mappings.set(SAMLPropertyMapping.objects.all()) 45 self.provider.save() 46 self.source = SAMLSource.objects.create( 47 slug="provider", 48 issuer="authentik", 49 pre_authentication_flow=create_test_flow(), 50 signing_kp=cert, 51 )
Hook method for setting up the test fixture before exercising it.
def
test_static_get(self):
53 def test_static_get(self): 54 """Test static LogoutRequest""" 55 request = LogoutRequestParser(self.provider).parse_detached(GET_LOGOUT_REQUEST) 56 self.assertEqual(request.id, "id-2ea1b01f69363ac95e3da4a15409b9d8ec525944") 57 self.assertEqual(request.issuer, "saml-test-sp") 58 # The GET request has an empty NameID element with transient format 59 self.assertIsNone(request.name_id) # Empty NameID element returns None 60 self.assertEqual(request.name_id_format, SAML_NAME_ID_FORMAT_TRANSIENT)
Test static LogoutRequest
def
test_static_post(self):
62 def test_static_post(self): 63 """Test static LogoutRequest""" 64 request = LogoutRequestParser(self.provider).parse(POST_LOGOUT_REQUEST) 65 self.assertEqual(request.id, "id-b8f4fd51ed4106f1e782b95d51d9ad3f385e5816") 66 self.assertEqual(request.issuer, "saml-test-sp") 67 # The POST request has an empty NameID element with transient format 68 self.assertIsNone(request.name_id) # Empty NameID element returns None 69 self.assertEqual(request.name_id_format, SAML_NAME_ID_FORMAT_TRANSIENT)
Test static LogoutRequest