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 Unauthorizedperché 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 Selectorindica un problema di configurazione della distribuzione. -
Request unauthorized as no authentication server matched the request and no default is specifiedindica 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.