Risoluzione degli errori di runtime del criterio BasicAuthentication

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza la documentazione di Apigee Edge.

UnresolvedVariable

Codice di errore

steps.basicauthentication.UnresolvedVariable

Corpo della risposta di errore

{
    "fault": {
        "faultstring": "Unresolved variable : [variable_name]",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Messaggio di errore di esempio

{
    "fault": {
        "faultstring": "Unresolved variable : request.header.Authorization",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Causa

Questo errore si verifica se la variabile contenente la stringa codificata Base64 specificata nell'elemento <Source> del criterio BasicAuthentication è:

  • Fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio)
  • Impossibile risolvere (non è definito)

Ad esempio, questo errore si verifica se il criterio BasicAuthentication ha una variabile specificata come request.header.Authorization nell'elemento <Source>, ma l'intestazione Autorizzazione non viene passata come parte della richiesta API.

Diagnosi

  1. Identifica la variabile utilizzata per l'elemento <Source> nel criterio BasicAuthentication. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nel seguente faultstring, la variabile utilizzata per l'elemento <Source> è request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Esamina tutti i criteri BasicAuthentication nel proxy API specifico in cui si è verificato l'errore. Potrebbero essere presenti uno o più criteri BasicAuthentication. Identifica i criteri o i criteri BasicAuthentication specifici in cui la variabile specificata nell'elemento <Source> corrisponde al nome della variabile identificato nella stringa di errore (passaggio 1 sopra).

    Ad esempio, il seguente criterio consente di impostare l'elemento <Source> su una variabile denominata request.header.Authorization, che corrisponde al contenuto in faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
      <DisplayName>Decode Basic Authentication Header</DisplayName>
      <Operation>Decode</Operation>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <User ref="request.header.username"/>
      <Password ref="request.header.password"/>
      <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. Determina se la variabile è definita e disponibile nel flusso in cui viene eseguito il criterio BasicAuthentication.

  4. Se la variabile è:

    1. Fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio)
    2. Impossibile risolvere (non è definito)

    Questa è la causa dell'errore.

    Nell'esempio del criterio BasicAuthentication mostrato sopra, la variabile request.header.Authorization non è stata trasmessa come parte della richiesta. Ciò significa che la richiesta API è stata effettuata senza l'intestazione Autorizzazione, come illustrato di seguito:

    curl -v "http://$EXTERNAL_IP/basicauth"

    Dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta Configurare il routing.

    Poiché la variabile utilizzata nel criterio BasicAuthentication non è disponibile, ricevi il codice di errore:

    steps.basicauthentication.UnresolvedVariable
    

Risoluzione

Assicurati che la variabile utilizzata nel criterio BasicAuthentication sia definita o passata come input e sia disponibile nel flusso in cui viene eseguito il criterio.

Per risolvere il problema relativo al criterio BasicAuthentication di esempio discusso sopra, effettua una richiesta API come illustrato di seguito:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta Configurare il routing.

InvalidBasicAuthenticationSource

Codice di errore

steps.basicauthentication.InvalidBasicAuthenticationSource

Corpo della risposta di errore

{
    "fault": {
        "faultstring": "Source variable : [variable_name] for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

Messaggio di errore di esempio di errore

{
    "fault": {
        "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

Cause possibili

Le possibili cause di questo errore sono:

Causa Descrizione
Variabile di origine non valida La variabile dell'origine di input per il criterio BasicAuthentication non è una stringa codificata Base64 valida.
Formato dell'intestazione non corretto L'intestazione contenente la stringa codificata Base64 passata al criterio BasicAuthentication non è un formato corretto.

Causa: variabile di origine non valida

Questo errore si verifica se la variabile contenente la stringa codificata Base64 specificata nell'elemento <Source> del criterio BasicAuthentication non contiene un valore valido.

Ad esempio, questo errore si verifica se la variabile specificata nell'elemento <Source> del criterio BasicAuthentication non ha una stringa codificata Base64 valida.

Diagnosi

  1. Identifica la variabile utilizzata per l'elemento <Source> nel criterio BasicAuthentication. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nel seguente faultstring, la variabile utilizzata per l'elemento <Source> è request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Esamina tutti i criteri BasicAuthentication nel proxy API specifico in cui si è verificato l'errore. Potrebbero essere presenti uno o più criteri BasicAuthentication. Identifica gli specifici criteri BasicAuthentication in cui la variabile specificata nell'elemento <Source> corrisponde al nome della variabile identificato nella stringa di errore (passaggio 1 sopra).

    Ad esempio, il seguente criterio consente di impostare l'elemento <Source> su una variabile denominata request.header.Authorization, che corrisponde al contenuto in faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. Se il valore memorizzato nella variabile specificata nell'elemento <Source> non è una stringa codificata Base64 valida, è la causa dell'errore.

    Nell'esempio del criterio BasicAuthentication mostrato sopra, la variabile request.header.Authorizationinviata dal client come intestazione non è valida, come illustrato di seguito:

    curl -v "http://$EXTERNAL_IP /basicauth" -H "Authorization: Basic 23435"

    Dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta Configurare il routing.

    Poiché la variabile request.header.Authorizationha una stringa codificata Base64 non valida "23435"", ricevi il codice di errore:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Risoluzione

Assicurati che la variabile specificata per l'elemento <Source> nel criterio BasicAuthentication abbia una stringa codificata Base64 valida.

Per risolvere il problema con il criterio BasicAuthentication di esempio discusso sopra, effettua una richiesta API passando una stringa valida codificata Base64 nell'intestazione Autorizzazione come mostrato di seguito:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta Configurare il routing.

Causa: formato non valido o intestazione non valida

Questo errore si verifica se l'intestazione passata al criterio BasicAuthentication non è valida o non è valida.

Ad esempio, questo errore si verifica se il criterio BasicAuthentication ha una variabile specificata come request.header.Authorization nell'elemento <Source> e l'intestazione passata come parte della richiesta API non è nel formato corretto o non è valida.

Diagnosi

  1. Identifica la variabile utilizzata per l'elemento <Source> nel criterio BasicAuthentication. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nell'errore seguente, la variabile utilizzata per l'elemento <Source> è request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Esamina tutti i criteri BasicAuthentication nel proxy API specifico in cui si è verificato l'errore. Potrebbero essere presenti uno o più criteri BasicAuthentication. Identifica gli specifici criteri BasicAuthentication in cui la variabile specificata nell'elemento <Source> corrisponde al nome della variabile identificato nella stringa di errore (passaggio 1 sopra).

    Ad esempio, il seguente criterio consente di impostare l'elemento <Source> su una variabile denominata request.header.Authorization, che corrisponde al contenuto in faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. Se la variabile è un'intestazione, il suo formato non è valido o non è valida, ovvero non ha il tipo di autenticazione o se il tipo di autenticazione non è "Di base", è questa la causa dell'errore.

    L'intestazione Autorizzazione è nel seguente formato:

    Authorization: <Authentication type> <credentials>
    

    Un'intestazione con formato non corretto può essere passata al criterio BasicAuthentication in due modi:

    Esempio 1: nessun tipo di autenticazione nell'intestazione:

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: YWthc2g6MTIz"

    Dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta Configurare il routing.

    Nell'esempio precedente, l'intestazione Autorizzazione non presenta il tipo di autenticazione. Se questa intestazione viene passata al criterio BasicAuthentication mostrato sopra, viene visualizzato il codice di errore:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Esempio 2: il tipo di autenticazione non è di tipo "Base":

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    Dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta Configurare il routing.

    Nell'esempio precedente, l'intestazione Autorizzazione non ha il tipo di autenticazione "Base". Se viene trasmesso al criterio BasicAuthentication mostrato sopra, viene visualizzato il codice di errore:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Allo stesso modo, questo errore può verificarsi anche se nell'intestazione Autorizzazione viene utilizzato un tipo di autenticazione, come Bearer, Digest Auth e così via.

Risoluzione

Assicurati che l'intestazione in cui viene passato l'input del criterio BasicAuthentication sia di tipo Authentication e che sia di tipo "Base".

Per risolvere il problema con il criterio BasicAuthentication di esempio discusso sopra, effettua una richiesta API passando una stringa valida codificata Base64 con tipo di autenticazione "Base" nell'intestazione Autorizzazione, come illustrato di seguito:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Dove $EXTERNAL_IP è l'indirizzo IP del bilanciatore del carico esterno. Questo indirizzo IP è esposto a internet. Per ulteriori informazioni, consulta Configurare il routing.