2011-08-05 19 views
12

Quando si firma una risposta SAML che ha anche un'asserzione firmata dovrei:Firma la risposta SAML con o senza firma di asserzione?

A) Generare la firma della risposta senza la firma dell'asserzione. Quindi iniettare la firma Assertion dopo che entrambe le firme sono state generate.

B) Generare la firma di asserzione e includerla durante la generazione della firma di risposta.

C) Qualcos'altro.?.

~ Grazie in anticipo!

risposta

6

Credo che la risposta corretta sia B). Firmare prima l'asserzione quindi firmare la risposta che contiene i dati sull'asserzione firmati. Tuttavia, se un singolo Emittente/Entità (STS/IDP/etc) sta firmando entrambi non c'è un vero motivo per firmare l'Asserzione? Basta firmare il messaggio di protocollo/risposta che dovrebbe includere i dati di asserzione. Ciò ridurrà i requisiti di elaborazione presso la SP. Per Web SSO, ho sempre visto entrambe le parti firmate quando hai un'entità diversa che firma l'asserzione rispetto alla risposta. - Ian

5

Se si sta firmando entrambi, quindi l'asserzione DEVE essere prima firmata, quindi la risposta, poiché la firma della risposta sarà basata sull'intero contenuto della risposta (inclusa la firma dell'asserzione). Quindi firmare l'asserzione secondo annullerebbe la firma della risposta.

35

SAML è terribile, ogni volta che leggo risposta sono quasi corretto, qui è l'algoritmo corretto distillata:

  1. SHA1 la versione canonica della asserzione.
  2. Genera un frammento SignedInfo XML con la firma SHA1
  3. Iscriviti frammento SignedInfo XML, ancora una volta la forma canonica
  4. Prendere la SignedInfo, la firma e le informazioni chiave e di creare un frammento XML Signature
  5. Inserire questo SignatureXML nella asserzione (dovrebbe andare a destra prima del SAML: soggetto)
  6. Non TAK l'affermazione (con la firma incluso) e inserito nel Response
  7. SHA1 questa risposta
  8. Genera un SignedI frammento XML nfo con la firma SHA1
  9. Iscriviti frammento SignedInfo XML, ancora una volta la forma canonica
  10. Prendere la SignedInfo, la firma e le informazioni chiave e di creare un frammento XML Signature
  11. Inserire questo SignatureXML nella risposta
  12. 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

0

La risposta corretta è B.

Se la parte che asserisce firma la risposta SAML utilizzando A, la parte relying deve rimuovere la firma della risposta SAML e la firma dell'asserzione SAML prima di convalidare la risposta SAML. SAML Core Specification afferma che la firma non deve essere generata utilizzando trasformazioni diverse dalla trasformata di firma con involucro o trasformata di canonicalizzazione esclusiva. Nessuna di queste due trasformazioni può rimuovere la firma dell'asserzione SAML. Pertanto, la parte relying non può validare la risposta SAML.

Problemi correlati