-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[1_SimpleSPWebApp] KeyNotFoundException LOGOUT #41
Comments
Aggiungo che dopo che passa un pò di tempo, il logout invece viene eseguito senza errore. P.S. Ho provato a mettere false a "LongSessionsEnabled" ma il logout da sempre l'errore |
Il codice presenta una problematica in quel punto. La cosa che capisco io (non sono così esperto per cui prendete la cosa con le pinze) da quello che vedo nella EC esposta da https://preprod.oidc.registry.servizicie.interno.gov.it è che non hanno un revocation ednpoint: il ché si traduce nel fatto che viene sempre lanciata un eccezzione ... anche sistemando il codice. |
@Eduardo1977 riesci a testarmi la modifica del #42 . Grazie. |
@PiemP Si grazie, dovrei riuscire a pomeriggio Intanto, stavo leggendo la documentazione SPIDCIE OIDC a tal riguardo |
Ciao @PiemP , il logout adesso viene eseguito correttamente. |
Grazie a te @Eduardo1977 ...
Rettifico questa cosa... oddio più che rettifico ho sbagliato il soggetto... ho recuperato l'EC di https://preproduzione.oidc.idserver.servizicie.interno.gov.it e il revocation endpoint è effettivamente presente ... faccio un paio di verifiche e aggiungo eventualmente altre modifiche al PR.
attualmente mi limito a fare un log di livello warning quando un revocation endpoint non è definito: per cui niente eccezzione. Però, dato quanto emerso dalle verifiche su https://preproduzione.oidc.idserver.servizicie.interno.gov.it, è meglio che verifichi effettivamente cosa succede di modo che l'informazione venga recuperata correttamente. Eventualmente ti chiederò di fare altri test 😉. |
OK. Prima non capivo perchè avessi indicato il registry, che in effetti non ha un revocation endpoint. ha questo: |
Ciao @PiemP , con la versione 1.2.0 non avevo mai riscontrato il problema del logout. V2.0.2 V1.2.0 Però, non sembra essere responsabile dell'eccezione che viene sollevata dal codice subito dopo (e che hai tolto con il fix): var revocationEndpoint = idp!.EntityConfiguration.Metadata.OpenIdProvider!.AdditionalData[SpidCieConst.RevocationEndpoint] as string; |
Il problema è un altro ed è strano ... ho un idea per risolverlo ma mi piacerebbe capirlo fino in fondo ... praticamente l'oggetto Io sono su .net 8.0 e riesco a replicare (credo, perché l'implementazione che uso io non richiama Ho provato a giochicchiare con le versioni dei pacchetti ma non riesco a vedere la proprietà compilata per cui sarei per creare una versione custom di Sarebbe bello approfondire ma al momento non ho tempo. |
Con questo commit 01be195 ho introdotto la mia idea "semplice" per la soluzione dell'anomalia della mancata compilazione del campo |
Come avevo scritto all'inizio, non mi è chiaro però, perchè dopo un pò di tempo, il logout veniva eseguito correttamente senza sollevare nessuna eccezione. @PiemP avevi fatto caso a quest'altro comportamento che avevo riscontrato? Il problema del logout potrebbe dipendere in qualche modo dalla configurazione dei certificati che ho effettuato? |
se ti riferisci a questo credo (e sottolineo credo, aka non sono sicuro al 100% perché non ho testato direttamente la call di spid-cie-oidc-aspnetcore/src/Spid.Cie.OIDC.AspNetCore/Extensions/SpidCieHandler.cs Lines 211 to 221 in c25899d
Hai fatto bene ad evidenziare la cosa. |
Ok grazie. Avevo scritto anche che con la v1.2.0 non si era mai verificato questo problema. public const string RevocationEndpoint = "revocation_endpoint"; public const string CallbackPath = "/signin-spidcie"; public const string SignedOutCallbackPath = "/signout-callback-spidcie"; |
Si ho letto, ma non conosco il codice della v1.2.0 (come non conosco bene questo codice) e non conosco le particolarità di quella versione ... per quello che ho potuto vedere ci sono nomi di classi differenti e usano librerie differenti (che potrebbero essere alla base del problema) ma la sostanza é quella ... posso solo dirti che sembra molto probabile che il problema si verficava perché non c'era il revocation endpoint dentro Nell'ultimo commit ho aggiunto un test e modificato un componente nei test per fare in modo che usi sempre lo stesso codice per il recupero dell'EC degli OP (lato test e lato applicativo) per verificare che il revocation endpoint sia compilato effettivamente. Il fix parte dall'assunto che nei test veniva utilizzato Rimane solo da testare l'ultimo commit. Io vedo la mia implementazione funzionante (e vedo il revocation endpoint negli |
Ciao @PiemP, ho fatto il tentativo di assegnare direttamente il valore dell'endpoint dentro al task RevokeToken: Però, sto riscontrando che fallisce comunque la chiamata per la revoca del token. La request che viene inviata è questa: {"Token":"eyJraWQiOiJkZWZhdWx0UlNBU2l ... ", Non so se può dipendere da qualcuno di quei valori null ? |
Probabile, così alla veloce non saprei dirti cosa non va. Mi servirebbe lo stack trace ... Ci sono delle cose che non mi tornano ad occhio ... tipo che la richiesta è fatta in GET mentre in teoria dovrebbe essere un POST ... per il resto i dati ci sono tutti ... forse troppi. La risposta dovrebbe essere un HTTP 200 senza nessun dato. Devo fare in modo che i miei servizi richiamino Dopo gli ultimi aggiornamenti nella PR #42 i dati per effettuare il revoke dovrebbero essere recuperati correttamente (anzi mi farebbe comodo se mi testassi la cosa visto che i miei servizi non chiamano ancora |
Ciao @PiemP grazie per il riscontro. Per i test vedo se riesco la settimana prossima. Vorrei chiederti se puoi darmi qualche chiarimento sull'utilizzo di certificati distinti per "OpenIdCoreCertificates" e "OpenIdFederationCertificates", perchè le istruzioni mi sembrano poche e ho anche il dubbio che ci sia un bug nella libreria. |
Stamattina ho approfondito meglio, la richiesta di revoca del token funziona e restituisce HTTP 200 ! {"Version":"1.1", |
ciao @Eduardo1977, ho aggiunto una correzione al codice nel commit 70e06fa per evitare la |
Ho effettuato con successo la federazione in ambiente di preproduzione, utilizzando l'ultima versione 2.0.2.
Il login con la carta di test funziona e restituisce correttamente i dati ma se effettuo il logout va in errore :
KeyNotFoundException
The given key 'revocation_endpoint' was not present in the dictionary.
Ho scordato qualcosa nell'appsettings?
Il primo indiziato potrebbe essere "RedirectUris" ?
Grazie
The text was updated successfully, but these errors were encountered: