53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
from saml2 import xmldsig as ds
|
|
from saml2 import config
|
|
from saml2 import extension_elements_to_elements
|
|
from saml2 import element_to_extension_element
|
|
from saml2 import saml
|
|
from saml2.client import Saml2Client
|
|
from saml2.extension import pefim
|
|
from saml2.extension.pefim import SPCertEnc
|
|
from saml2.samlp import Extensions
|
|
from saml2.samlp import authn_request_from_string
|
|
from saml2.sigver import read_cert_from_file
|
|
from pathutils import full_path
|
|
|
|
__author__ = 'roland'
|
|
|
|
conf = config.SPConfig()
|
|
conf.load_file("server_conf")
|
|
client = Saml2Client(conf)
|
|
|
|
# place a certificate in an authn request
|
|
cert = read_cert_from_file(full_path("test.pem"), "pem")
|
|
|
|
spcertenc = SPCertEnc(
|
|
x509_data=ds.X509Data(
|
|
x509_certificate=ds.X509Certificate(text=cert)))
|
|
|
|
extensions = Extensions(
|
|
extension_elements=[element_to_extension_element(spcertenc)])
|
|
|
|
req_id, req = client.create_authn_request(
|
|
"http://www.example.com/sso",
|
|
"urn:mace:example.com:it:tek",
|
|
nameid_format=saml.NAMEID_FORMAT_PERSISTENT,
|
|
message_id="666",
|
|
extensions=extensions)
|
|
|
|
|
|
print(req)
|
|
|
|
# Get a certificate from an authn request
|
|
|
|
xml = "%s" % req
|
|
|
|
parsed = authn_request_from_string(xml)
|
|
|
|
_elem = extension_elements_to_elements(parsed.extensions.extension_elements,
|
|
[pefim, ds])
|
|
|
|
assert len(_elem) == 1
|
|
_spcertenc = _elem[0]
|
|
_cert = _spcertenc.key_info[0].x509_data[0].x509_certificate.text
|
|
assert cert == _cert
|