Autenticazione degli utenti finali con il proprio provider di identità authentication

IMPORTANT
Adobe LLM Apps è attualmente in Beta.
Le funzioni, i flussi di lavoro e l’interfaccia utente mostrati qui non rappresentano necessariamente lo stato finale del prodotto. Per partecipare al Beta, invia un’e-mail a llm-apps-beta@adobe.com.

Per impostazione predefinita, ogni azione nell’app è pubblica: qualsiasi piattaforma LLM con l’URL del server MCP può chiamarla e il gestore non è in grado di identificare l’utente finale.

Attiva l’autenticazione quando un’azione deve sapere quale utente finale richiede, ad esempio per restituire ordini, adesioni o dettagli dell’account. La piattaforma LLM firma l’utente con il provider di identità (IdP), invia il token di accesso risultante a ogni chiamata e il gestore riceve l’identità verificata.

Percorso: Copia l’identificatore della risorsa → configura il provider di identità → attivare l’autenticazione → impostare una modalità di autenticazione per ogni azione → distribuire → leggere l’identità nel gestore → testare l’app protetta.

Si tratta di un ramo avanzato, non fa parte del percorso di prima esecuzione. Completa Crea automaticamente la tua prima app e Distribuisci prima l’app.

Come funziona

Hai il tuo provider di identità. L’app distribuita è solo un server di risorse OAuth 2.1. Verifica i token emessi dal server di autorizzazione. Non emette mai token e Adobe non memorizza mai l’ID client o il segreto client.

┌── Your identity provider ───────────────────────────────────────────────┐
│  Authorization server — you own it                                      │
│  Issues access tokens, holds the user directory, defines the scopes     │
└─────────────────────────────────────────────────────────────────────────┘
        ▲  2  user signs in, platform gets an access token
        │                                    │
        │  1  platform discovers your        │  3  every tools/call carries
        │     authorization server from      │     Authorization: Bearer <token>
        │     your app's metadata            ▼
┌── LLM platform (ChatGPT, Claude, …) ────────────────────────────────────┐
└─────────────────────────────────────────────────────────────────────────┘
                                             │
                                             ▼
┌── Your LLM App on Adobe I/O Runtime ────────────────────────────────────┐
│  Resource server — verifies the token's signature, issuer, audience,    │
│  and expiry, then enforces the auth mode you set for each action        │
│                                                                         │
│  Your handler reads the verified identity from its second argument      │
└─────────────────────────────────────────────────────────────────────────┘

L’autenticazione è configurata per ambiente. Stage e Produzione contengono impostazioni indipendenti, pertanto puoi verificare la configurazione in base a un tenant IdP di sviluppo prima di abilitarla in Produzione.

Prima di iniziare

  • Provider di identità OAuth 2.1 o OpenID Connect che emette JWT token di accesso firmati con un algoritmo asimmetrico. I token opachi e i token con firma HMAC non sono supportati. Vedi Requisiti del token.
  • Accesso amministratore a tale provider di identità, per consentire di registrare un’API e un client.
  • L’app è stata distribuita almeno una volta nell’ambiente che stai configurando. L’URL del server MCP distribuito è il valore su cui i token devono avere l’ambito.

Copia l’identificatore della risorsa

L’identificatore di risorsa dell’app è l’URL del server MCP. Ogni token di accesso che il provider di identità rilascia per questa app deve denominare tale URL esatto come pubblico. Il binding è ciò che impedisce a un token coniato per un altro servizio di essere riprodotto contro la tua app.

  1. Apri la pagina Dettagli app.
  2. Scorri fino a Verifica l’app.
  3. Nell’ambiente che si sta configurando, selezionare Copia URL.

Dettagli app — copia l'URL del server MCP dell'area di gestione temporanea

Mantieni questo valore: ne hai bisogno nel provider di identità nel passaggio successivo. Incolla l’URL copiato anziché digitarlo nuovamente. Il controllo del pubblico è una corrispondenza esatta della stringa, che include qualsiasi componente del percorso; pertanto, una differenza di carattere singolo impedisce la convalida di ogni token.

NOTE
Ogni ambiente ha il proprio URL di server MCP e quindi il proprio pubblico. Configura Stage e Produzione separatamente.

Configurare il provider di identità

I passaggi esatti variano a seconda del provider, ma ogni provider ha bisogno degli stessi quattro elementi.

  1. Registra l’app come API (risorsa). Impostare il relativo identificatore, ovvero il valore immesso dal provider nell’attestazione aud del token, sull’URL del server MCP copiato. I provider etichettano questo campo in modo diverso, in genere Identificatore o Pubblico. Non utilizzare un valore generico come api. L’identificatore deve essere univoco per questa app oppure un token emesso per un altro servizio può essere riprodotto su di essa.
  2. Definisci gli ambiti con cui desideri eseguire il gate delle azioni, ad esempio orders:read o profile:read. Utilizza un ambito per ogni autorizzazione significativa, pertanto un’azione richiede solo ciò di cui ha bisogno.
  3. Supporto PKCE. Le piattaforme LLM inviano un code_challenge con code_challenge_method=S256 a ogni richiesta di autorizzazione, pertanto il server di autorizzazione deve supportare PKCE S256 e pubblicizzare "code_challenge_methods_supported": ["S256"] nei relativi metadati.
  4. Consenti alla piattaforma LLM di registrarsi come client. Le piattaforme LLM supportate creano il proprio client OAuth rispetto al server di autorizzazione, quindi abilitate la registrazione client dinamica se offerta dal provider. In caso contrario, crea manualmente un client pubblico e fornisci il relativo ID client (e segreto), solo se il provider richiede l’autenticazione client riservata, durante la configurazione del connettore sulla piattaforma. Registra l’URI di reindirizzamento nei documenti della piattaforma; per le superfici ospitate di Claude che è https://claude.ai/api/mcp/auth_callback. Alcune piattaforme generano un URI di reindirizzamento distinto per ogni connettore creato dall’utente, ChatGPT tra di esse, pertanto leggi il valore dalla schermata di configurazione del connettore e registralo prima del primo accesso. Un URI di reindirizzamento non registrato fa in modo che il server di autorizzazione rifiuti completamente la richiesta di autorizzazione.
IMPORTANT
Gli endpoint di tipo emittente, JWKS, autorizzazione e token del provider di identità devono essere tutti raggiungibili tramite HTTPS pubblico. Sia la piattaforma LLM che l’app implementata recuperano direttamente i metadati dal provider, pertanto un provider di identità dietro un elenco Consentiti VPN o IP non può completare il processo di accesso. Un firewall o un firewall dell’applicazione web di fronte al provider è una causa comune e può interrompere il flusso anche quando l’app stessa è raggiungibile.

Attiva autenticazione

  1. Nel menu di navigazione a sinistra, seleziona Impostazioni, quindi apri la scheda Autenticazione.

  2. In Workspace, scegli Stage o Produzione.

  3. Attiva Abilita autenticazione.

  4. In Impostazioni core, immetti:

    • Emittente: l’URL emittente del provider di identità, che è anche il valore inserito nell’attestazione iss di ogni token. Questo è obbligatorio, deve essere HTTPS e viene pubblicato anche come server di autorizzazione dell’app in modo che le piattaforme LLM possano scoprire dove inviare gli utenti. È supportato un solo provider di identità per app.
    • Ambiti supportati: ogni ambito richiesto dalle azioni dell’app. Esegui il mirroring degli ambiti definiti nel provider di identità.
  5. Impostazioni avanzate è facoltativo. Imposta URI JWKS solo quando le chiavi di firma non sono nel punto in cui i metadati del server autorizzazioni li pubblicizzano; in caso contrario l’app le individua automaticamente.

  6. Seleziona Salva.

Autenticazione: abilitare l'autenticazione e completare le impostazioni di base

Per informazioni sull’accettazione di ogni campo, vedere Impostazioni di autenticazione.

Scegli una modalità di autenticazione per ogni azione

Quando si attiva Abilita autenticazione, ogni azione attualmente impostata su Nessuna cambia in Obbligatorio. In Configurazione per azione, controlla l’assegnazione e imposta la modalità necessaria per ogni azione:

Modalità
Comportamento
Nessuno
Pubblico. L’azione può essere chiamata senza un token.
Obbligatorio
Cancellato. L’azione può essere chiamata solo con un token valido che includa tutti gli ambiti elencati per essa. I chiamanti non autenticati sono costretti ad accedere.
Facoltativo
Chiamabile in modo anonimo, ma l’azione annuncia anche il supporto dell’accesso. Il gestore decide per chiamata se distribuire un risultato generico o chiedere all’utente di effettuare l’accesso per uno personalizzato.

Autenticazione: impostare una modalità di autenticazione e gli ambiti per ogni azione

Le azioni già impostate su Obbligatorie o Facoltative mantengono la modalità esistente.

Per un’azione Obbligatorio o Facoltativo, aggiungi i Ambiti necessari. Ogni ambito deve già essere visualizzato in Ambiti supportati. In caso contrario, l’app richiederà un’autorizzazione che non viene annunciata alle piattaforme LLM. Il salvataggio è bloccato fino alla risoluzione della mancata corrispondenza.

Ambiti supportati è l’autorità per questo elenco. Se si rimuove un ambito da esso, tale ambito viene rimosso da ogni azione che lo richieda non appena si apporta la modifica, quindi aggiungere prima un ambito, quindi assegnarlo a un’azione.

Autenticazione obbligatoria per tutte le azioni imposta ogni azione su Obbligatoria. Se si cancella, verrà restituita ogni azione a None.

Al termine, seleziona Salva. Le modifiche alla modalità di autenticazione e all’ambito vengono salvate insieme alle impostazioni a livello di app.

IMPORTANT
Se si disattiva Abilita autenticazione, questa configurazione per azione viene ignorata per l'ambiente selezionato. La modalità e gli ambiti di ogni azione vengono cancellati, non memorizzati. La riattivazione riparte da tutti-Obbligatorio.
NOTE
L'impostazione di ogni azione su None non disattiva l'autenticazione. Nessuna chiamata viene rifiutata in tale stato, ma l’app annuncia ancora il server di autorizzazione alle piattaforme LLM, in modo che un client possa offrire all’utente un accesso che non concede alcun accesso aggiuntivo. Per rendere l'app completamente pubblica, disattivare Abilita autenticazione e distribuire.

Sono supportate le modalità di combinazione in un’app, alcune azioni pubbliche e altre gestite, e ChatGPT applica singolarmente la modalità di ogni azione: solo le azioni gestite richiedono l’accesso dell’utente.

IMPORTANT
Claude è l'eccezione. Applica l'autenticazione per connettore anziché per azione, quindi se un'azione nell'app è impostata su Obbligatorio o Facoltativo, Claude chiede all'utente di accedere prima di utilizzare il connettore, incluse le azioni impostate su Nessuno. Per mantenere pubblica un'azione per Claude utenti, inserirla in un'app separata.

Distribuire la modifica

Le modifiche di autenticazione hanno effetto sulla prossima distribuzione di questa app. Distribuisci nuovamente l’app nell’ambiente configurato. Consulta Distribuire l’app.

L’URL del server MCP non cambia, quindi tutti i plug-in o i connettori già creati continuano a funzionare. Ora è gestita, quindi ai suoi utenti viene richiesto di effettuare l’accesso la prossima volta che lo utilizzano.

Leggi l’identità nel gestore

Un’identità verificata raggiunge il gestore come secondo argomento. È presente ogni volta che il chiamante invia un token valido, indipendentemente dalla modalità di autenticazione dell’azione, quindi un’azione Facoltativa può personalizzare il risultato quando è presente un token e restituire comunque un risultato quando non lo è.

Utilizza getAuthenticatedUser per leggere l’utente connesso:

const { getAuthenticatedUser } = require('@adobe/llm-apps-runtime');

module.exports = async ({ orderId }, extra) => {
  const userId = getAuthenticatedUser(extra);

  if (!userId) {
    return { content: [{ type: 'text', text: 'Sign in to see your orders.' }] };
  }

  const order = await fetchOrderForUser(userId, orderId);

  return {
    content: [{ type: 'text', text: `Order ${order.id} is ${order.status}.` }],
    structuredContent: order
  };
};

Non è necessario verificare il token personalmente. Per un’azione Obbligatoria, il runtime blocca ogni chiamata priva di un token valido che contiene gli ambiti elencati, pertanto il gestore viene eseguito solo per un chiamante autorizzato. Utilizzare hasScope quando si desidera eseguire un ramo su un’autorizzazione anziché fare affidamento sul gate, ad esempio in un’azione Facoltativa.

Un’azione Facoltativa può richiedere all’utente di accedere a metà conversazione restituendo extra.challengeAuth(). Questa opzione è disponibile solo per Azioni facoltative:

module.exports = async ({ signIn }, extra) => {
  if (signIn && !extra.authInfo) {
    return extra.challengeAuth({
      error: 'invalid_token',
      errorDescription: 'Sign in to see member pricing.'
    });
  }

  return {
    content: [{
      type: 'text',
      text: extra.authInfo ? await memberDeals() : await publicDeals()
    }]
  };
};

Decidere se eseguire l’escalation da un parametro di input esplicito, come signIn in questo caso, anziché esaminare la formulazione dell’utente.

Imposta error in modo che corrisponda alla condizione segnalata. Utilizzare invalid_token quando il chiamante non dispone di una sessione valida e deve accedere, come nell’esempio precedente, e insufficient_scope quando il chiamante è già connesso ma il token non dispone di un ambito necessario per l’azione. La piattaforma LLM sceglie il testo della richiesta che l’utente vede, e quanto varia con questo valore in base alla piattaforma — quindi invia il codice che descrive la condizione con precisione.

Eseguire la verifica solo quando l’identità necessaria è effettivamente mancante, come nel caso del controllo !extra.authInfo. L’accesso non può soddisfare un gestore che lancia una sfida incondizionata, pertanto all’utente viene richiesto di eseguire di nuovo l’autenticazione a ogni chiamata.

NOTE
In ChatGPT, un accesso generato in questo modo richiede all'utente di riconnettersi al connettore anziché concedere un'autorizzazione aggiuntiva. Il Claude l'utente effettua l'accesso prima dell'esecuzione di qualsiasi azione, pertanto un'azione non deve mai generarne una.

Mantieni il lato server dell’identità. Passa solo ciò di cui il widget ha bisogno in structuredContent e non inserire mai il token di accesso. Vedere Personalizzare un gestore generato.

Per il contratto completo, vedi API di autenticazione gestore.

Testare l’app protetta

Il plug-in o il connettore esistente rileva la modifica dopo la distribuzione. Per configurarne uno da zero:

ChatGPT

Nella finestra di dialogo Nuovo plug-in, imposta Autenticazione in modo che corrisponda alla configurazione delle azioni dell’app:

Azioni dell’app
Seleziona
Tutti impostati su Nessuno
Nessuna autenticazione
Tutto impostato su Obbligatorio
OAuth
Qualsiasi altra combinazione
Misto

ChatGPT — seleziona la modalità di autenticazione per il plug-in

Un’azione Facoltativa accetta sempre chiamate anonime, pertanto un’app che ne contiene una non è mai completamente gestita. Scegliere Mista anche se ogni azione è impostata su Facoltativa. Solo Richiesto rifiuta i chiamanti non autenticati.

Per il resto della finestra di dialogo, consulta Test del plug-in ChatGPT.

Claude

Aggiungi il connettore personalizzato, quindi seleziona Connetti e completa l’accesso presentato dal provider di identità. Nessuna scelta di autenticazione da effettuare: Claude cancella l’intero connettore ogni volta che viene gestita un’azione. Vedere Verificare il connettore Claude.

Verificare

  • La piattaforma ti reindirizzerà alla pagina di accesso del tuo provider di identità.
  • Dopo l’accesso, un’azione protetta restituisce dati specifici dell’utente.
  • Un’azione protetta richiede l’accesso quando si è disconnessi.
  • Il ChatGPT, un’azione impostata su None risponde ancora senza effettuare l’accesso. Su Claude, l’intero connettore è gestito.

Se l’accesso non viene avviato o se un token viene rifiutato, vedere Risoluzione dei problemi.

Linee guida sulla sicurezza

  • Concedi l’ambito più ristretto necessario per ogni azione. Non riutilizzare un ambito ampio in ogni azione.
  • Mantieni il client segreto nel provider di identità e nella configurazione del connettore della piattaforma LLM. Non inserire mai metadati di azione, codice del gestore, widget JavaScript o controllo del codice sorgente.
  • Tratta le attestazioni token come input da un sistema esterno. Convalidare qualsiasi elemento letto da authInfo.extra prima di utilizzarlo in una query.
  • Autorizza e autentica. Un token valido dimostra chi è l’utente, non che può vedere un record particolare — controlla la proprietà nel gestore prima di restituire i dati.
  • Non registrare token, set di attestazioni completi o identificatori utente.
  • Restituisci errori sicuri. Non rendere visibili all’utente le risposte o le tracce dello stack del provider di identità a monte.
  • Configura e verifica Stage in un tenant del provider di identità non di produzione prima di abilitare l’autenticazione in Produzione.

Passaggio successivo

recommendation-more-help
llm-apps-help-main-toc