Ambiente di test ed integrazione CIE - Keycloak - OIDC

Buongiorno,
devo integrare Keycloak con CIE utilizzando OIDC.

L’utilizzo di OIDC invece di SAML2 mi eviterebbe di usare plugin/proxy e far quindi dialogare i due sistemi in modo nativo.
Purtroppo oltre alla documentazione tecnica SPID/CIE OpenID Connect Regole tecniche | SPID/CIE OpenID Connect non si riescono a trovare altre indicazioni. Sembra che a nessuno freghi nulla dell’integrazione con CIE.

In più mi servirebbe un ambiente “demo” OIDC dove testare l’integrazione simile a quello predisposto per SPID/SAML2. Anche qui non ho trovato nulla.

Sapete darmi indicazioni su dove recuperare le informazioni mancanti?
Grazie

forse il team di @IPZS-CIE ti può essere d’aiuto

Perchè la federazione basata su OIDC non è ancora attiva, nè per CIE , nè per SPID.

Questo progetto si pone le finalità che cerchi. Ma è da considerare un progetto in beta per le considerazione di cui sopra.

Grazie mille,
ma c’è da qualche parte una roadmap con le tempistiche e lo stato del progetto?
Perché per chi non è coinvolto in prima persona nel progetto risulta alquanto difficoltoso reperire informazioni in modo preciso. Sto raccimolando pezzi di informazione tra sito ufficiale, github, forum… e si fa fatica a capire come sia la situazione reale.

Nel corso del tempo sono state fornite varie date di attivazione della Federazione OIDC, ma per un motivo o per l’altro (riscrittura delle regole tecniche, contrasti e avvicendamenti fra gli IdP SPID, etc.) non sono state rispettate.
Che io sappia, al momento non vi è una (ulteriore) data ufficiale di attivazione.

@AGS da quanto ho capito la federazione OIDC per CIE dovrebbe essere già stata attivata dal Poligrafico. Quello che non riesco a trovare invece sono le informazioni su come poter validare l’Entity Configuration ed utilizzare l’ambiente di test e poi quello di produzione (quali endpoint chiamare, dove si trovano i tool ufficiali di validazione…). E’ necessario avviare la procedura di onboarding per poter disporre di queste informazioni?

1 Mi Piace

Non ho esperienze personali, ma da quello che ho capito, si: https://federazione.servizicie.interno.gov.it/

Confermo che l’ambiente di test viene attivato al termine del processo di onboarding.
Al momento della creazione della componente tecnica viene richiesto di selezionare un protocollo (OIDC), l’ambiente (pre-produzione), il client id e la chiave pubblica.
Il problema è che quando si preme il pulsante per continuare, fallisce la validazione con un errore piuttosto generico:

“LA VALIDAZIONE NON E’ ANDATA A BUON FINE PER I SEGUENTI MOTIVI:[SUB] ELEMENTO MANCANTE”

Eppure nel metadata l’elemento “sub” è presente (sempre che il messaggio intenda quello).
Inoltre sono riuscito a validare con successo questo stesso metadata tramite il validatore di test dello SPID (quello raggiungibile qui: SPID OIDC CHECK RP).
A qualcuno è capitato lo stesso problema?

1 Mi Piace

il jwt tup deve contenere il claim subject col dominio del id_cliente https://rp.example.it/ (url_rp) non nel metadata

{
“alg”: “RS256”,
“kid”: “2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs”,
“typ”: “entity-statement+jwt”
}
.
{
“exp”: 1649590602,
“iat”: 1649417862,
“iss”: “url_rp”,
“sub”: “url_rp”,
“jwks”: {
“keys”: [
{
“kty”: “RSA”,
“n”: “5s4qi …”,
“e”: “AQAB”,
“kid”: “2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs”
}
]
},
“metadata”: {
“openid_relying_party”: {
“application_type”: “web”,
“client_id”: “url_rp”,
“client_registration_types”: [
“automatic”
],
“jwks”: {
“keys”: [
{
“kty”: “RSA”,
“use”: “sig”,
“n”: “1Ta-sE …”,
“e”: “AQAB”,
“kid”: “YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs”
}
]
},
“client_name”: “Name of an example organization”,
“contacts”: [
“ops@rp.example.it”
],
“grant_types”: [
“refresh_token”,
“authorization_code”
],
“redirect_uris”: [
“url_rp/oidc/rp/callback/”
],
“response_types”: [
“code”
],
“subject_type”: “pairwise”
},
“federation_entity”: {
“federation_resolve_endpoint”: “url_rp/resolve/”,
“organization_name”: “PA OIDC Service Provider”,
“homepage_uri”: “https://rp.example.it”,
“policy_uri”: “url_rp/policy”,
“logo_uri”: “:url_rp/logo.svg”,
“contacts”: [
“tech@example.it”
]
}
},
“trust_marks”: [
{
“id”: “https://registry.agid.gov.it/openid_relying_party/public/”,
“trust_mark”: “eyJh …”
}
],
“authority_hints”: [
"https://regist
]
}

Ciao @seifeddine ,
ho verificato gli elementi che vengono restituiti nel JWT e “sub” è presente:
https://oidc-test.klan.it/oidc_test/.well-known/openid-federation?output=json

Mi è venuto un altro dubbio però: qualunque valore inserisca nel campo “Chiave pubblica di federazione”, il portale di federazione CIE mi restituisce sempre lo stesso errore (quello di elemento “sub” mancante). Temo quindi che il problema sia a monte e cioè che per qualche motivo non riesca a decodificare il jwt ritornato a causa di una chiave errata. Nel campo “Chiave pubblica di federazione” ho inserito il valore riportato nel JWT in jwks–>keys–>[0]–>x5c
E’ corretto?

secondo me devi guardare il client_id che hai messo perché dovrebbe essere uguale al sub e per x5c nel esempio della documentazione non l’hanno nemmeno scritto

Il client_id è: “https://oidc-test.klan.it/oidc_test”, che è uguale al valore di “sub” e di “iss”.
“client_id” è presente in metadata–>openid_relying_party->client_id, come riportato ad esempio qui:
SPID/CIE OpenID Connect Regole tecniche | Esempi

invece nel metadata secondo me ti manca un pezzo di federation_entity

Ho aggiunto la parte del federation_entity, ma ottengo sempre lo stesso errore…

il kid di jwks di metadata e i kid di oidc core devono essere diversi invece quello del header deve essere uguale alla chiave pubblica

Buongiorno a tutti, siamo anche noi bloccati nello stesso punto.
Inizialmente ci veniva restituito l’errore generico “L’ENTITA’ NON RISPETTA I REQUISITI DI FEDERAZIONE” successivamente a seguito di ticket con il ministero ci viene indicato di verificare il sigillo di firma portandoci all’errore del sub.

Anche per noi il validatore e il tool in docker risulta validare con successo il metadata.

Dai nostri log risulta che il portale di cie faccia solo la chiamata alla .well-known/openid-federation e al momento non testi nessun’altra endpoint.
Qualcuno è riuscito a risolvere?
Non riesco a trovare nessun provider già federato in OIDC in CIE per scaricarmi la sua EC e fare le verifiche con la nostra configurazione.

Grazie Molte.

Luca

Nel componente che sto utilizzando il kid viene calcolato in questo modo:

$x5cData = openssl_x509_parse(file_get_contents($file), false);
$organizationIdentifier = $x5cData[‘issuer’][‘organizationIdentifier’];
$serialNumber = $x5cData[‘serialNumber’];
$kid = hash(‘sha256’, $organizationIdentifier . ‘.’ . $serialNumber);

Si tratta del componente “spid-cie-oidc-php” disponibile su Developers Italia.
Per avere due kid differenti dovrei quindi utilizzare due chiavi differenti?

si certo che potresti creare due kid diversi con la stessa chiave per esempio $kid2 = hash(‘sha256’, strtoupper($organizationIdentifier) . ‘.’ . $serialNumber); io ho aggiunto upperCase. tu potresti giocare li

Ho modificato il kid (in effetti ci sono due kid differenti anche nell’esempio che c’è qui: SPID/CIE OpenID Connect Regole tecniche | Esempi), ma tentando di nuovo la creazione della componente tecnica sul portale CIE ho sempre lo stesso errore…

Buongiorno,
ho anche il lo stesso problema, continuo a ricevere l’errore “[sub] Elemento mancante”, siete riusciti a risolvere o capire da cosa potesse essere causato?

Grazie
Leo