Dubbio su AssertionConsumerService multipli

Ciao, sto lavorando a un custom provider open source per SPID da utilizzare in Keycloak (https://github.com/lscorcia/keycloak-spid-provider) e mi chiedevo se gli IdP sono in grado di gestire un SP che dichiari nei suoi metadata più di un AssertionConsumerService.

Mi spiego meglio. Keycloak assegna ad ogni IdP remoto un suo specifico URL per la restituzione delle asserzioni, quindi nel mio metadato SP dovrei pubblicare 9 servizi:

<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/ArubaSpidL2/endpoint" index="1" isDefault="true"/>
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/InfocertSpidL2/endpoint" index="2" />
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/IntesaSpidL2/endpoint" index="3" />
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/LepidaSpidL2/endpoint" index="4" />
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/NamirialSpidL2/endpoint" index="5" />
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/PosteSpidL2/endpoint" index="6" />
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/RegisterSpidL2/endpoint" index="7" />
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/SielteSpidL2/endpoint" index="8" />
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.domain.com/auth/realms/public/broker/TimSpidL2/endpoint" index="9" />

Ho verificato con lo SPID-TestEnv2 e lì funziona correttamente, ma non è molto rappresentativo perché non è un vero e proprio IdP. Anche a norma di specifica SAML2 dovrebbe essere corretto, perché nelle mie AuthnRequest specifico esplicitamente l’AssertionConsumerServiceURL che l’IdP deve usare per inviare la risposta e il consumer dovrebbe limitarsi a valutare il matching dell’URL fornito con almeno uno degli URL presenti nel metadato.

Sarei felice di scoprire che già qualche altro SP utilizza con successo questa tecnica, ma ho cercato qua e la nello SPID Registry e mi sembra che tutti utilizzino SP che espongono un unico AssertionConsumerService.

Qualcuno di voi ha esperienze in merito?

Ciao @l.scorcia,

ti confermo che gli IdP gestiscono correttamente più AssertionConsumerService.

Michele D’Amico
Collaboratore Agenzia per l’Italia Digitale