SAML è terribile, ogni volta che leggo risposta sono quasi corretto, qui è l'algoritmo corretto distillata:
- SHA1 la versione canonica della asserzione.
- Genera un frammento SignedInfo XML con la firma SHA1
- Iscriviti frammento SignedInfo XML, ancora una volta la forma canonica
- Prendere la SignedInfo, la firma e le informazioni chiave e di creare un frammento XML Signature
- Inserire questo SignatureXML nella asserzione (dovrebbe andare a destra prima del SAML: soggetto)
- Non TAK l'affermazione (con la firma incluso) e inserito nel Response
- SHA1 questa risposta
- Genera un SignedI frammento XML nfo con la firma SHA1
- Iscriviti frammento SignedInfo XML, ancora una volta la forma canonica
- Prendere la SignedInfo, la firma e le informazioni chiave e di creare un frammento XML Signature
- Inserire questo SignatureXML nella risposta
- Aggiungere le informazioni sulla versione XML alla risposta.
Questo è tutto. SAML è completamente orribile. Ci sono un sacco di sottigliezze che rendono l'implementazione di SAML un incubo (come il calcolo della forma canonica di un sottoinsieme dell'XML (l'asserzione), anche la versione XML dei documenti XML non è inclusa.
Ho finito la mia implementazione, I spero di non rivisitare ancora un simile dolore