> For the complete documentation index, see [llms.txt](https://manuale.opencontent.it/manuali/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manuale.opencontent.it/manuali/manuale-operativo-interno/tenant-manager/integrazione-con-authentik.md).

# Integrazione con Authentik

Il Tenant Manager si integra con Authentik per il provisioning automatico degli accessi autenticati. L'integrazione è attiva solo per le applicazioni con il campo Authentik abilitato impostato a true.

Gli ambienti Authentik disponibili sono:

* QA — <https://auth-qa.opencityitalia.it/>
* Produzione — <https://auth.opencityitalia.it/>

### **Provisioning del tenant**

Quando un tenant raggiunge uno stato finale tramite il ciclo di vita (attivo, in produzione, archiviato, eliminato), il flow Windmill esegue automaticamente il subflow Authentik corrispondente:

<table><thead><tr><th width="211.48828125">Stato finale</th><th>Azione Authentik</th></tr></thead><tbody><tr><td>active / production</td><td>Crea Application + Provider OAuth2 + gruppo tenant (idempotente)</td></tr><tr><td>archived</td><td>Rimuove l'accesso all'app (soft — il gruppo resta)</td></tr><tr><td>deleted</td><td>Elimina Application, Provider e gruppo tenant</td></tr></tbody></table>

È anche possibile eseguire il provisioning manualmente dalla scheda Identità del tenant, senza passare per il ciclo di vita.

**Sezione Autenticazione OAuth2 (accordion nel tab Informazioni)**

Visibile solo per i tenant la cui applicazione ha Authentik abilitato.

* Redirect URI OAuth2 — campo di testo multiriga (uno per riga). Se l'applicazione ha un redirect\_uri\_pattern, la textarea viene pre-popolata automaticamente con l'URI espanso dai dati del tenant (app\_id, environment, customer\_slug, campi config). Se l'espansione è parziale (alcuni segnaposto richiedono valori di configurazione non ancora salvati), viene mostrata l'anteprima sotto la textarea. Il pulsante Salva persiste il valore nel campo authentik\_redirect\_uri del tenant. Gli URI vengono inviati al provider Authentik al momento del provisioning.
* Stato provisioning — badge Provisionato / Non provisionato, calcolato interrogando Authentik in tempo reale.
* Pulsante "Provisiona" — visibile solo se il tenant non è ancora provisionato. Avvia il flow Authentik direttamente, indipendentemente dallo stato del ciclo di vita. Prima di inviare la richiesta, salva automaticamente il valore della textarea se diverso da quello in DB.
* Credenziali OAuth2 (solo se provisionato) — Client ID, Client Secret (con pulsante copia ⎘); OpenID Configuration URL, JWKS URL (come link cliccabili); nome del gruppo cliente e del gruppo tenant in Authentik (con pulsante copia ⎘).

### **Scheda** Utenti **— Tenant**

Visibile solo per i tenant la cui applicazione ha Authentik abilitato. Se il tenant non è ancora provisionato, mostra un avviso con link al tab Informazioni (dove si trovano il pulsante Provisiona e le credenziali). Una volta provisionato, mostra la lista degli utenti del gruppo Authentik del tenant, con le stesse operazioni disponibili nella scheda Utenti del Cliente.

### **Scheda** Utenti **— Cliente**

Permette di gestire gli utenti che possono accedere ai tenant del cliente. La scheda mostra il gruppo Authentik del cliente (customer/{slug}) e le seguenti operazioni:

* **Aggiungi utente** — cerca un utente esistente in Authentik per email e aggiungilo al gruppo cliente; se non esiste, crea un invito di enrollment con link da condividere.
* **Invita** — invia un invito di enrollment a uno o più indirizzi email. Gli utenti già presenti in Authentik vengono aggiunti direttamente; gli altri ricevono il link di registrazione.
* **Importa CSV** — operazione bulk per aggiungere o invitare più utenti da un file.
* **Gestisci accesso** — per ogni utente, seleziona a quali tenant (tra quelli del cliente provisionati in Authentik) può accedere. Disponibile anche in modalità bulk per agire su più utenti contemporaneamente.

### **Scheda** Utenti **— Organizzazione**

Ogni organizzazione censita nel Tenant Manager ha un gruppo Authentik corrispondente (organization/{slug}), creato automaticamente alla registrazione dell'organizzazione.

La scheda permette di:

* **Gestire gli utenti del gruppo** — aggiungere utenti esistenti, invitare nuovi utenti (enrollment), importare da CSV, rimuovere utenti.
* **Gestire gli accessi app** — visualizza e configura i tenant (dei clienti gestiti dall'organizzazione) a cui il gruppo organizzazione ha accesso. Il pulsante Sincronizza tutti concede automaticamente l'accesso a tutti i tenant assegnati all'organizzazione.

### Modalità single-tenant e multi-tenant

Il campo **App mode** sull'applicazione (single-tenant / multi-tenant) determina come vengono creati gli oggetti in Authentik.

#### Single-tenant

Ogni tenant ha un proprio Provider OAuth2 e una propria Application in Authentik, specifici per quel cliente.

* **Nome provider e application**: `{app_slug}-{customer_slug}-{app_id}-{environment}` Es. website-comuni-comune-roma-acme123-production
* **Redirect URI**: configurabili per ogni tenant dalla scheda Identità; vengono aggiornati in Authentik ad ogni salvataggio.
* **Rinomina**: se cambia l'app\_id del tenant, il provider e l'application vengono rinominati automaticamente in Authentik.
* **Eliminazione**: alla cancellazione del tenant, provider e application vengono eliminati da Authentik.

#### Multi-tenant

L'Application e il Provider in Authentik sono condivisi tra tutti i clienti dello stesso ambiente. Il TM non li crea né li elimina.

* **Nome provider e application**: {app\_slug}-{environment} Es. chatbot-production
* **Redirect URI**: statici, gestiti direttamente in Authentik (il TM non li modifica).
* **Rinomina / eliminazione**: il TM non tocca provider e application; rinomina o elimina solo il gruppo tenant.

#### Cosa è comune a entrambe le modalità

In entrambi i casi il provisioning crea un **gruppo tenant** in Authentik:

`customer/{customer_slug}/tenant/{app_id}/{environment}`

Questo gruppo è sempre creato al provisioning e sempre eliminato alla cancellazione del tenant, indipendentemente dalla modalità.
