La configurazione del selettore di autenticazione dinamica non è valida oppure una distribuzione con più autori non riesce più a soddisfare le richieste a un server di autenticazione

Scopri come risolvere gli errori del selettore di autenticazione dinamico e gli errori di corrispondenza delle richieste nelle configurazioni multi-autorità durante la creazione delle distribuzioni API con il servizio Gateway API.

Se una distribuzione API utilizza più server di autenticazione e li seleziona in modo dinamico, gli errori possono verificarsi in fase di distribuzione o in runtime. Durante la distribuzione, il gateway API può rifiutare una configurazione di selettore non valida. In fase di runtime, il gateway API può accettare la distribuzione, ma non riesce a soddisfare una richiesta a un server di autenticazione.

Quando succede

Potresti vedere uno o entrambi i seguenti sintomi:

  • Il gateway API rifiuta la distribuzione con un errore Invalid Dynamic Authentication Selector.

  • Creazione della distribuzione riuscita, ma alcune richieste in seguito restituiscono 401 Unauthorized perché nessun server di autenticazione corrisponde alla richiesta.

Il problema si verifica spesso nelle distribuzioni che utilizzano metodi di autenticazione diversi per pattern di richiesta diversi, ad esempio l'autenticazione della chiave API per un pattern di instradamento e l'autenticazione OAuth2 per un altro pattern di instradamento.

Funzionamento dell'autenticazione dinamica

Una distribuzione di autenticazione dinamica utilizza il valore selectionSource.selector per decidere quale server di autenticazione gestisce ogni richiesta. Per ogni richiesta, il gateway API risolve il valore del selettore dalla richiesta e confronta tale valore con le chiavi del server di autenticazione configurate.

Utilizzare uno dei seguenti moduli di selezione supportati:

  • request.auth[<key>]

  • request.path[<key>]

  • request.query[<key>]

  • request.headers[<key>]

  • request.subdomain[<key>]

  • request.host

Dopo che il gateway API ha risolto il valore del selettore, seleziona il server di autenticazione corrispondente. Se nessuna chiave del server di autenticazione corrisponde, il gateway API utilizza il server di autenticazione predefinito, se configurato. In caso contrario, la richiesta non riesce con 401 Unauthorized.

Parte 1: creazione distribuzione non riuscita perché il selettore non è valido

Questo errore si verifica quando l'espressione del selettore non è valida e la distribuzione non può essere creata.

Come appare

La distribuzione è stata rifiutata con il seguente errore:

  • Invalid Dynamic Authentication Selector

Perché succede

L'espressione del selettore deve utilizzare un form del selettore supportato e una sintassi del selettore valida. I seguenti esempi di selettore non sono validi:

  • random

  • request.header[]]

  • request.path[path1]*request.path[path2]

Per poter creare o aggiornare la distribuzione, è necessario correggere questi errori di configurazione.

Requisito selettore percorso

Se si utilizza request.path[<key>], il valore <key> deve essere il nome di un parametro di percorso definito nell'instradamento.

Il seguente instradamento e selettore utilizzano lo stesso nome di parametro del percorso:

  • Percorso: /DMPServices/{serviceType}

  • Selettore: request.path[serviceType]

Il selettore request.path[/] non è valido perché / non è un nome di parametro di percorso.

Come risolvere il problema

Utilizzare i seguenti controlli per correggere la sintassi non valida del selettore:

  • Sostituire il selettore non valido con uno dei form del selettore supportati.

  • Se si utilizza request.path[<key>], definire lo stesso parametro del percorso denominato nell'instradamento.

  • Se il pattern di richiesta non è basato su un parametro di percorso stabile, utilizzare un selettore di intestazione o parametro query.

Parte 2: Distribuzione riuscita, ma richieste successive non riuscite senza server di autenticazione corrispondente

Questo errore si verifica in runtime. La configurazione di distribuzione è valida, ma una richiesta in entrata non produce un valore di selettore corrispondente a qualsiasi server di autenticazione configurato.

Come appare

In fase di runtime, le richieste non riescono con il seguente messaggio:

  • Request unauthorized as no authentication server matched the request and no default is specified

Il messaggio indica che il gateway API ha raggiunto la distribuzione, ma non è stato possibile selezionare un server di autenticazione per la richiesta.

Perché succede

L'errore si verifica in genere perché il valore del selettore è presente nella prima richiesta ma manca nelle richieste successive. Ad esempio, la richiesta iniziale potrebbe includere un parametro di query che seleziona il server di autenticazione, mentre le richieste successive per i file .js, i file .css, le immagini o le chiamate API omettono tale parametro di query.

Se non è configurato alcun server di autenticazione predefinito, una richiesta che non include un valore di selettore corrispondente non riesce con 401 Unauthorized.

Come si adattano i cookie e lo stato OAuth2

I cookie e il parametro state OAuth2 possono aiutare a preservare le informazioni di sessione o di flusso, ma non sostituiscono il requisito del selettore di runtime per le normali richieste di follow-up.

Problemi selettore parametri query

Un selettore parametro query può non riuscire quando la richiesta iniziale include il valore del selettore, ma le richieste successive lo omettono. Ad esempio, le richieste del browser per asset quali file .js, file .css e immagini spesso non includono gli stessi parametri di query della richiesta iniziale.

Durante il passo di reindirizzamento o callback OAuth2, API Gateway può utilizzare il parametro state OAuth2 per recuperare il server di autenticazione utilizzato per tale flusso. Dopo il callback, le normali richieste di follow-up devono ancora corrispondere al funzionamento di selezione dell'autenticazione della distribuzione.

Come scegliere un selettore migliore

Utilizzare un valore del selettore presente in ogni richiesta che deve essere autenticato in modo coerente. I seguenti tipi di selettore sono spesso più affidabili di un selettore dei parametri di query:

  • Intestazione di richiesta che utilizza request.headers[<key>].

  • Parametro di percorso stabile che utilizza request.path[<key>].

  • Se è richiesta la selezione dell'autenticazione basata su host, utilizzare il nome host request.host.

Per le applicazioni basate su browser, un'intestazione di richiesta è spesso più affidabile di un parametro di query perché le richieste di follow-up possono includere la stessa intestazione in modo coerente.

Come risolvere gli errori di corrispondenza runtime

Utilizzare i seguenti controlli per correggere gli errori di corrispondenza del server di autenticazione runtime:

  • Se il selettore utilizza un parametro di query non presente nelle richieste successive, impostare il selettore su un valore di richiesta stabile, ad esempio un parametro di intestazione o percorso.

  • Se si prevede che alcune richieste omettano il valore del selettore, configurare un server di autenticazione predefinito appropriato.

  • Se il selettore utilizza un parametro di percorso, verificare che le richieste successive includano lo stesso parametro di percorso.

  • Se l'applicazione utilizza i cookie, utilizzarli solo per la continuità della sessione. Non fare affidamento solo sui cookie per selezionare il server di autenticazione per le normali richieste di follow-up.

Cosa controllare

Per una distribuzione già attiva, confrontare la richiesta riuscita con la richiesta non riuscita. Confermare i seguenti dettagli:

  • Il selettore configurato in selectionSource.

  • Valore del selettore che viene risolto dalla richiesta riuscita.

  • Valore del selettore che viene risolto dalla richiesta non riuscita.

  • Indica se il valore del selettore è presente in entrambe le richieste.

  • Indica se una chiave del server di autenticazione corrisponde a ogni valore del selettore risolto.

  • Indica se è configurato un server di autenticazione predefinito.

Quali offerte disponibili nei log

Utilizzare i log di esecuzione per identificare la modalità di errore:

  • Invalid Dynamic Authentication Selector indica un problema di configurazione della distribuzione.

  • Request unauthorized as no authentication server matched the request and no default is specified indica un problema di corrispondenza delle richieste runtime.

Risolvere questi problemi separatamente. Una configurazione di distribuzione valida può comunque non riuscire in runtime se le richieste successive non includono un valore di selettore corrispondente.

Verifica della correzione

Dopo aver corretto il mapping del selettore o del server di autenticazione, verificare il flusso di distribuzione e richiesta.

  • Ricreare o aggiornare la distribuzione se la configurazione del selettore è stata modificata.

  • Inviare di nuovo la richiesta iniziale.

  • Inviare le richieste di follow-up non riuscite in precedenza.

  • Confermare che il gateway API non rifiuta più la distribuzione per la sintassi del selettore.

  • Confermare che le richieste di runtime non riescono più perché nessun server di autenticazione corrisponde alla richiesta.

Per ulteriori informazioni

Per ulteriori informazioni, fare riferimento agli argomenti sotto riportati.