Fehlerbehebung bei Laufzeitfehler der BasicAuthentication-Richtlinie

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

UnresolvedVariable

Fehlercode

steps.basicauthentication.UnresolvedVariable

Fehlerantworttext

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

Beispiel für Fehlermeldung

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

Ursache

Dieser Fehler tritt auf, wenn für die Variable mit dem Base64-codierten String, der im <Source>-Element der BasicAuthentication-Richtlinie angegeben ist, Folgendes gilt:

  • Wert liegt außerhalb des Bereichs (nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird)
  • Variable kann nicht aufgelöst werden (ist nicht definiert)

Dieser Fehler tritt beispielsweise auf, wenn in der BasicAuthentication-Richtlinie im <Source>-Element eine Variable request.header.Authorization angegeben ist, der Autorisierungs-Header jedoch nicht als Teil der API-Anfrage übergeben wird.

Diagnose

  1. Ermitteln Sie die Variable, die für das <Source>-Element in der BasicAuthentication-Richtlinie verwendet wird. Sie finden diese Information im faultstring-Element der Fehlerantwort. Im folgenden faultstring, ist beispielsweise request.header.Authorization die Variable, die für das <Source>-Element verwendet wird:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Prüfen Sie alle BasicAuthentication-Richtlinien im jeweiligen API-Proxy, in dem der Fehler aufgetreten ist. Es können eine oder mehrere BasicAuthentication-Richtlinien vorhanden sein. Ermitteln Sie die spezifischen BasicAuthentication -Richtlinien, in denen die im <Source>-Element angegebene Variable mit dem im Fehlerstring angegebenen Variablennamen übereinstimmt (siehe Schritt 1 oben).

    Die folgende Richtlinie legt beispielsweise das <Source>-Element auf eine Variable namens request.header.Authorization fest, die mit dem übereinstimmt, was in faultstring enthalten ist:

    <?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. Prüfen Sie, ob die Variable definiert und in dem Ablauf verfügbar ist, in dem die BasicAuthentication-Richtlinie ausgeführt wird.

  4. Wenn die Variable entweder:

    1. Wert liegt außerhalb des Bereichs (nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird)
    2. nicht aufgelöst werden kann (ist nicht definiert)

    Dann ist das die Ursache des Fehlers.

    In der obigen Beispielrichtlinie BasicAuthentication wurde die Variable request.header.Authorization nicht als Teil der Anfrage übergeben. Das bedeutet, dass die API-Anfrage ohne den Autorisierungs-Header gesendet wurde, wie hier gezeigt:

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

    Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.

    Da die in der BasicAuthentication-Richtlinie verwendete Variable nicht verfügbar ist, erhalten Sie folgenden Fehlercode:

    steps.basicauthentication.UnresolvedVariable
    

Lösung

Achten Sie darauf, dass die in der BasicAuthentication-Richtlinie verwendete Variable definiert ist oder als Eingabe zur Verfügung gestellt wird und im Ablauf, in dem die Richtlinie ausgeführt wird, verfügbar ist.

Um das Problem mit der obigen BasicAuthentication-Richtlinie zu beheben, stellen Sie eine API-Anfrage wie die folgende:

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

Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.

InvalidBasicAuthenticationSource

Fehlercode

steps.basicauthentication.InvalidBasicAuthenticationSource

Fehlerantworttext

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

Beispiel für eine Fehlermeldung

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

Mögliche Ursachen

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung
Ungültige Quellvariable Die Eingabequellvariable für die BasicAuthentication-Richtlinie ist kein gültiger Base64-codierter String.
Fehlerhafter Header Der Header mit dem Base64-codierten String, der an die BasicAuthentication-Richtlinie übergeben wird, ist fehlerhaft.

Ursache: Ungültige Quellvariable

Dieser Fehler tritt auf, wenn die Variable mit dem Base64-codierten String, der im <Source>-Element der BasicAuthentication-Richtlinie angegeben ist, keinen gültigen Wert enthält.

Der Fehler tritt beispielsweise dann auf, wenn die Variable, die im <Source>-Element der BasicAuthentication-Richtlinie angegeben ist, keinen gültigen Base64-codierten String enthält.

Diagnose

  1. Ermitteln Sie die Variable, die für das <Source>-Element in der BasicAuthentication-Richtlinie verwendet wird. Sie finden diese Information im faultstring-Element der Fehlerantwort. Im folgenden faultstring, ist beispielsweise request.header.Authorization die Variable, die für das <Source>-Element verwendet wird:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Prüfen Sie alle BasicAuthentication-Richtlinien im jeweiligen API-Proxy, in dem der Fehler aufgetreten ist. Es können eine oder mehrere BasicAuthentication-Richtlinien vorhanden sein. Ermitteln Sie die spezifischen BasicAuthentication-Richtlinien, in denen die im <Source>-Element angegebene Variable mit dem im Fehlerstring angegebenen Variablennamen übereinstimmt (siehe Schritt 1 oben).

    Die folgende Richtlinie legt beispielsweise das <Source>-Element auf eine Variable namens request.header.Authorization fest, die mit dem übereinstimmt, was in faultstring enthalten ist:

    <?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. Wenn der Wert in der im <Source>-Element angegebenen Variable kein gültiger Base64-codierter String ist, ist dies die Ursache des Fehlers.

    In der obigen Beispielrichtlinie BasicAuthentication ist die Variable request.header.Authorization, die vom Client als Header gesendet wurde, wie im Folgenden gezeigt ungültig:

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

    Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.

    Da die Variable request.header.Authorization einen ungültigen Base64-codierten String 23435" enthält, erhalten Sie folgenden Fehlercode:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Lösung

Achten Sie darauf, dass die in der BasicAuthentication-Richtlinie für das <Source>-Element angegebene Variable einen gültigen Base64-codierten String enthält.

Um das Problem mit der obigen BasicAuthentication-Richtlinie zu beheben, stellen Sie eine API-Anfrage und übergeben Sie dafür wie im Folgenden dargestellt einen gültigen Base64-codierten String im Autorisierungs-Header:

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

Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.

Ursache: Header ist fehlerhaft/ungültig

Dieser Fehler tritt auf, wenn der an die BasicAuthentication-Richtlinie übergebene Header fehlerhaft oder ungültig ist.

Der Fehler tritt beispielsweise dann auf, wenn in der BasicAuthentication-Richtlinie im <Source>-Element die Variable request.header.Authorization angegeben ist und der Header, der als Teil der API-Anfrage übergeben wird, fehlerhaft bzw. ungültig ist.

Diagnose

  1. Ermitteln Sie die Variable, die für das <Source>-Element in der BasicAuthentication-Richtlinie verwendet wird. Sie finden diese Information im faultstring-Element der Fehlerantwort. Im Folgenden wird beispielsweise für das <Source>-Element die Variable request.header.Authorization verwendet:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Prüfen Sie alle BasicAuthentication-Richtlinien im jeweiligen API-Proxy, in dem der Fehler aufgetreten ist. Es können eine oder mehrere BasicAuthentication-Richtlinien vorhanden sein. Ermitteln Sie die spezifischen BasicAuthentication-Richtlinien, in denen die im <Source>-Element angegebene Variable mit dem im Fehlerstring angegebenen Variablennamen übereinstimmt (siehe Schritt 1 oben).

    Die folgende Richtlinie legt beispielsweise das <Source>-Element auf eine Variable namens request.header.Authorization fest, die mit dem übereinstimmt, was in faultstring enthalten ist:

    <?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. Wenn die Variable ein Header und fehlerhaft oder ungültig ist, d. h. wenn sie nicht den Authentifizierungstyp hat oder der Authentifizierungstyp nicht "Basic" ist, ist das die Ursache für den Fehler.

    Der Autorisierungs-Header hat das folgende Format:

    Authorization: <Authentication type> <credentials>
    

    Ein fehlerhafter Header kann auf zwei Arten an die BasicAuthentication-Richtlinie übergeben werden:

    Beispiel 1: Im Header ist kein Authentifizierungstyp vorhanden:

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

    Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.

    Im obigen Beispiel hat der Autorisierungs-Header nicht den Authentifizierungstyp. Wenn dieser Header an die oben dargestellte BasicAuthentication-Richtlinie übergeben wird, erhalten Sie folgenden Fehlercode:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Beispiel 2: Der Authentifizierungstyp ist nicht vom Typ "Basic":

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

    Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.

    Im obigen Beispiel hat der Autorisierungs-Header nicht den Authentifizierungstyp "Basic". Wird dieser Header an die oben dargestellte BasicAuthentication-Richtlinie übergeben, erhalten Sie folgenden Fehlercode:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Ebenso kann dieser Fehler auftreten, wenn im Autorisierungs-Header ein Authentifizierungstyp wie „Bearer“ oder „Digest Auth“ verwendet wird.

Lösung

Prüfen Sie, ob der Header, an den die Eingabe für die BasicAuthentication-Richtlinie übergeben wird, den Authentifizierungstyp hat und der Typ "Basic" lautet.

Um das Problem mit der obigen BasicAuthentication-Richtlinie zu beheben, stellen Sie eine API-Anfrage und übergeben dafür einen gültigen Base64-codierten String mit dem Authentifizierungstyp „Basic“ im Autorisierungs-Header, wie im Folgenden dargestellt:

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

Dabei ist $EXTERNAL_IP die IP-Adresse des externen Load-Balancers. Diese IP-Adresse ist im Internet sichtbar. Weitere Informationen finden Sie unter Zugriffs-Routing anpassen.