88 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| from saml2 import saml
 | |
| from saml2 import config
 | |
| 
 | |
| from saml2.server import Server
 | |
| from saml2.response import response_factory
 | |
| from saml2.response import StatusResponse
 | |
| from saml2.response import AuthnResponse
 | |
| from saml2.sigver import security_context, MissingKey
 | |
| 
 | |
| from pytest import raises
 | |
| 
 | |
| XML_RESPONSE_FILE = "saml_signed.xml"
 | |
| XML_RESPONSE_FILE2 = "saml2_response.xml"
 | |
| 
 | |
| def _eq(l1,l2):
 | |
|     return set(l1) == set(l2)
 | |
| 
 | |
| IDENTITY = {"eduPersonAffiliation": ["staff", "member"],
 | |
|             "surName": ["Jeter"], "givenName": ["Derek"],
 | |
|             "mail": ["foo@gmail.com"],
 | |
|             "title": ["shortstop"]}
 | |
| 
 | |
| class TestResponse:
 | |
|     def setup_class(self):
 | |
|         server = Server("idp_conf")
 | |
|         name_id = server.ident.transient_nameid(
 | |
|                                 "urn:mace:example.com:saml:roland:sp","id12")
 | |
| 
 | |
|         self._resp_ = server.create_authn_response(IDENTITY,
 | |
|                                             "id12",     # in_response_to
 | |
|                                             "http://lingon.catalogix.se:8087/",   # consumer_url
 | |
|                                             "urn:mace:example.com:saml:roland:sp", # sp_entity_id
 | |
|                                             name_id=name_id)
 | |
|                 
 | |
|         self._sign_resp_ = server.create_authn_response(
 | |
|                                 IDENTITY,
 | |
|                                 "id12",                       # in_response_to
 | |
|                                 "http://lingon.catalogix.se:8087/",   # consumer_url
 | |
|                                 "urn:mace:example.com:saml:roland:sp", # sp_entity_id
 | |
|                                 name_id = name_id,
 | |
|                                 sign_assertion=True)
 | |
| 
 | |
|         self._resp_authn = server.create_authn_response(
 | |
|                                 IDENTITY,
 | |
|                                 "id12",                       # in_response_to
 | |
|                                 "http://lingon.catalogix.se:8087/",   # consumer_url
 | |
|                                 "urn:mace:example.com:saml:roland:sp", # sp_entity_id
 | |
|                                 name_id = name_id,
 | |
|                                 authn=(saml.AUTHN_PASSWORD,
 | |
|                                        "http://www.example.com/login"))
 | |
|         
 | |
|         conf = config.SPConfig()
 | |
|         conf.load_file("server_conf")
 | |
|         self.conf = conf
 | |
|         
 | |
|     def test_1(self):
 | |
|         xml_response = ("%s" % (self._resp_,))
 | |
|         resp = response_factory(xml_response, self.conf, 
 | |
|                                 return_addr="http://lingon.catalogix.se:8087/",
 | |
|                                 outstanding_queries={"id12": "http://localhost:8088/sso"},
 | |
|                                 timeslack=10000, decode=False)
 | |
|         
 | |
|         assert isinstance(resp, StatusResponse)
 | |
|         assert isinstance(resp, AuthnResponse)
 | |
| 
 | |
|     def test_2(self):
 | |
|         xml_response = self._sign_resp_
 | |
|         resp = response_factory(xml_response, self.conf,
 | |
|                                 return_addr="http://lingon.catalogix.se:8087/",
 | |
|                                 outstanding_queries={"id12": "http://localhost:8088/sso"},
 | |
|                                 timeslack=10000, decode=False)
 | |
| 
 | |
|         assert isinstance(resp, StatusResponse)
 | |
|         assert isinstance(resp, AuthnResponse)
 | |
| 
 | |
| 
 | |
|     def test_only_use_keys_in_metadata(self):
 | |
|         conf = config.SPConfig()
 | |
|         conf.load_file("sp_2_conf")
 | |
| 
 | |
|         sc = security_context(conf)
 | |
|         # should fail
 | |
|         raises(MissingKey,
 | |
|                'sc.correctly_signed_response("%s" % self._sign_resp_)')
 | 
