italia / spid-saml-check

Tool di verifica implementazione SPID SAML
European Union Public License 1.2
72 stars 60 forks source link

Attributo AllowCreate su NameIDPolicy nella AuthnRequest #138

Open mauromol opened 3 years ago

mauromol commented 3 years ago

Le specifiche originali di SPID riportano questa frase:

deve essere presente l’elemento <NameIDPolicy> avente il relativo attributo AllowCreate, se presente, valorizzato a “true” e l’attributo Format valorizzato come “urn:oasis:names:tc:SAML:2.0:nameid-format:transient”;

L'avviso 5 (errata corrige) poi dice che la correzione da apportare consiste nell'eliminazione della frase:

il relativo attributo AllowCreate, se presente, valorizzato a “true” e"

Pertanto la frase originale diventa:

deve essere presente l’elemento <NameIDPolicy> avente l’attributo Format valorizzato come "urn:oasis:names:tc:SAML:2.0:nameid-format:transient”;

Questo, di per sé, non dice niente sull'eventuale valorizzazione o meno dell'attributo AllowCreate, lasciando intendere che viene ignorato. In effetti, la tabella degli errori SPID pubblicata su: https://www.agid.gov.it/sites/default/files/repository_files/tabella-messaggi-spid-v1.3_0.pdf dice che: "Nel caso di valori diversi dalla specifica del parametro opzionale AllowCreate si procede con l'autenticazione senza riportare errori". Lo stesso c'è scritto nelle regole tecniche consolidate su Developers Italia. Probabilmente quindi c'è consapevolezza sul fatto che qui la specifica non sia molto chiara. Tuttavia lo SPID Validator restituisce un errore (failure) nel caso in cui l'attributo AllowCreate sia specificato:

The AllowCreate attribute must not be present - AV n°5

Data la semantica dell'attributo AllowCreate, posso essere d'accordo sul fatto che, nel caso di SPID, abbia più senso richiedere che il valore sia omesso o sia false (casi equivalenti, da specifica SAML 2.0), tuttavia, visto quanto sopra, mi sarei eventualmente aspettato che al più SPID Validator desse un warning, piuttosto che una failure tout-court. Oppure le specifiche andrebbero chiarite meglio.

mauromol commented 3 years ago

Rileggendo la definizione di AllowCreate nelle specifiche SAML 2.0 Core (sez. 3.4.1.1):

A Boolean value used to indicate whether the identity provider is allowed, in the course of fulfilling the request, to create a new identifier to represent the principal. Defaults to "false". When "false", the requester constrains the identity provider to only issue an assertion to it if an acceptable identifier for the principal has already been established. Note that this does not prevent the identity provider from creating such identifiers outside the context of this specific request (for example, in advance for a large number of principals).

AllowCreate si riferisce alla facoltà di creare l'identificatore, non il principal, per cui poiché SPID usa identificatori transient creati sul momento, in effetti avrebbe più senso richiedere che valga true, come nelle regole tecniche originali.

Sia come sia, rimane il fatto che, allo stato attuale delle specifiche SPID, l'avviso 5 indica una correzione che non specifica in alcun modo che AllowCreate debba obbligatoriamente essere omesso, dice solo di rimuovere il vincolo originale.