Hello all, I am using xml.dom.minidom for creating a SAML metadata file which is an xml file. Code -
import xml.dom.minidom as md doc = md.Document() entity_descr = doc.createElement("EntityDescriptor") doc.appendChild(entity_descr) entity_descr.setAttribute('xmlns', 'urn:oasis:names:tc:SAML:2.0:metadata') entity_descr.setAttribute('xmlns:saml', 'urn:oasis:names:tc:SAML:2.0:assertion') entity_descr.setAttribute('xmlns:ds', ' http://www.w3.org/2000/09/xmldsig#') # Get the entity_id from saml20_idp_settings entity_descr.setAttribute('entityID', self.group['entity_id']) idpssodescr = doc.createElement('IDPSSODescriptor') idpssodescr.setAttribute('WantAuthnRequestsSigned', 'true') idpssodescr.setAttribute('protocolSupportEnumeration', 'urn:oasis:names:tc:SAML:2.0:protocol') entity_descr.appendChild(idpssodescr) keydescr = doc.createElement('KeyDescriptor') keydescr.setAttribute('use', 'signing') idpssodescr.appendChild(keydescr) keyinfo = doc.createElement('ds:KeyInfo') keyinfo.setAttribute('xmlns:ds', 'http://www.w3.org/2000/09/xmldsig#') keydescr.appendChild(keyinfo) x509data = doc.createElement('ds:X509Data') keyinfo.appendChild(x509data) # check this part s = "this is a cert blah blah" x509cert = doc.createElement('ds:X509Certificate') cert = doc.createTextNode(s) x509cert.appendChild(cert) x509data.appendChild(x509cert) sso = doc.createElement('SingleSignOnService') sso.setAttribute('Binding', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect') sso.setAttribute('Location', 'http://googleapps/singleSignOn') idpssodescr.appendChild(sso) # Write the metadata file. fobj = open('metadata.xml', 'w') doc.writexml(fobj, " ", "", "\n", "UTF-8") fobj.close() This produces - <?xml version="1.0" encoding="UTF-8"?> <EntityDescriptor entityID="skar" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"> <IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <KeyDescriptor use="signing"> <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:X509Data> <ds:X509Certificate> this is a cert blah blah </ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </KeyDescriptor> <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http:///singleSignOn"/> </IDPSSODescriptor> </EntityDescriptor> Though the third-party library wants it as, <ds:X509Certificate>this is a cert blah blah ........ </ds:X509Certificate> Have checked to ensure that there are no newlines etc but still get this problem. Have asked this - http://stackoverflow.com/questions/1623607/escaping-and-in-xml-when-using-xml-dom-minidom Thanks for your help. Regards, Bhaskar.
-- http://mail.python.org/mailman/listinfo/python-list