تحديد مشاكل وقت تشغيل سياسة المصادقة الأساسية وحلّها

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

UnresolvedVariable

رمز الخطأ

steps.basicauthentication.UnresolvedVariable

نص استجابة الخطأ

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

مثال على رسالة الخطأ

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

السبب

يحدث هذا الخطأ إذا كان المتغيّر الذي يحتوي على سلسلة Base64 المرمّزة والمحددة في العنصر <Source> من سياسة BasicAuthentication أيًا مما يلي:

  • خارج النطاق (لا تتوفّر خلال المسار المحدّد الذي يتم فيه تنفيذ السياسة)
  • يتعذّر حلّها (غير محدَّد)

على سبيل المثال، يحدث هذا الخطأ إذا كانت سياسة BasicAuthentication تحتوي على متغيّر تم تحديده على أنّه request.header.Authorization في العنصر <Source>، ولكن لا يتم تمرير عنوان التفويض كجزء من طلب البيانات من واجهة برمجة التطبيقات.

التشخيص

  1. حدِّد المتغيّر المستخدَم للعنصر <Source> في سياسة BasicAuthentication. يمكنك العثور على هذه المعلومات في العنصر faultstring في استجابة الخطأ. على سبيل المثال، في faultstring, التالي، يكون المتغيّر المستخدَم للعنصر <Source> هو request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. افحص جميع سياسات BasicAuthentication في خادم وكيل واجهة برمجة التطبيقات المحدد حيث حدث الفشل. قد تكون هناك سياسة واحدة أو أكثر من سياسات BasicAuthentication. حدِّد سياسة أو سياسات BasicAuthentication المحدَّدة التي يتطابق فيها المتغيّر المحدَّد في العنصر <Source> مع اسم المتغيّر المحدَّد في سلسلة الخطأ (الخطوة رقم 1 أعلاه).

    على سبيل المثال، تضبط السياسة التالية العنصر <Source> على متغيّر باسم request.header.Authorization، والذي يتطابق مع ما هو في 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. حدِّد ما إذا كان المتغيّر محدّدًا ومتاحًا في المسار الذي يتم فيه تنفيذ سياسة BasicAuthentication.

  4. إذا كان المتغيّر إما:

    1. خارج النطاق (لا تتوفّر خلال المسار المحدّد الذي يتم فيه تنفيذ السياسة)
    2. يتعذّر حلّها (غير محدَّد)

    وهذا هو سبب الخطأ.

    في مثال سياسة BasicAuthentication الواردة أعلاه، لم يتم تمرير المتغيّر request.header.Authorization كجزء من الطلب. وهذا يعني أنّه تم تقديم طلب البيانات من واجهة برمجة التطبيقات بدون عنوان التفويض كما هو موضّح أدناه:

    curl -v "http://org-env.apigee.net/basicauth"

    بما أنّ المتغيّر المستخدَم في سياسة BasicAuthentication غير متاح، ستتلقّى رمز الخطأ:

    steps.basicauthentication.UnresolvedVariable
    

الدقة

تأكَّد من أنّ المتغيّر المستخدَم في سياسة BasicAuthentication محدّد أو مُرسَل كإدخال وأنّه يكون متاحًا في المسار الذي يتم فيه تنفيذ السياسة.

لحلّ المشكلة المتعلقة بنموذج سياسة BasicAuthentication التي تمت مناقشتها أعلاه، يمكنك تقديم طلب بيانات من واجهة برمجة التطبيقات كما هو موضّح أدناه:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

InvalidBasicAuthenticationSource

رمز الخطأ

steps.basicauthentication.InvalidBasicAuthenticationSource

نص استجابة الخطأ

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

مثال على رسالة خطأ

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

الأسباب المحتملة

الأسباب المحتملة لهذا الخطأ هي:

السبب الوصف
متغيّر المصدر غير صالح متغير مصدر الإدخال لسياسة BasicAuthentication ليس سلسلة Base64 مشفرة صالحة.
العنوان مكتوب غير صحيح. العنوان الذي يحتوي على سلسلة Base64 المشفرة التي تم تمريرها إلى سياسة BasicAuthentication غير صحيح.

السبب: متغيّر مصدر غير صالح

يحدث هذا الخطأ إذا كان المتغيّر الذي يحتوي على سلسلة Base64 المرمّزة والمحددة في العنصر <Source> ضمن سياسة BasicAuthentication لا يحتوي على قيمة صالحة.

على سبيل المثال، يحدث هذا الخطأ إذا لم يكن المتغير المحدّد في العنصر <Source> في سياسة BasicAuthentication لا يحتوي على سلسلة Base64 مرمّزة صالحة.

التشخيص

  1. حدِّد المتغيّر المستخدَم للعنصر <Source> في سياسة BasicAuthentication. يمكنك العثور على هذه المعلومات في العنصر faultstring في استجابة الخطأ. على سبيل المثال، في faultstring, التالي، يكون المتغيّر المستخدَم للعنصر <Source> هو request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. افحص جميع سياسات BasicAuthentication في خادم وكيل واجهة برمجة التطبيقات المحدد حيث حدث الفشل. قد تكون هناك سياسة واحدة أو أكثر من سياسات BasicAuthentication. حدِّد سياسة BasicAuthentication المحدّدة التي يتطابق فيها المتغيّر المحدّد في العنصر <Source> مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة رقم 1 أعلاه).

    على سبيل المثال، تضبط السياسة التالية العنصر <Source> على متغيّر باسم request.header.Authorization، والذي يتطابق مع ما هو في 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. إذا كانت القيمة المخزّنة في المتغيّر المحدّد في العنصر <Source> ليست سلسلة Base64 مرمّزة صالحة، يشكّل ذلك سبب الخطأ.

    في مثال السياسة BasicAuthentication الموضحة أعلاه، كان المتغيّر request.header.Authorization الذي أرسله العميل كرأس غير صالح كما هو موضح أدناه:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic 23435"

    بما أنّ المتغيّر request.header.Authorizationيتضمّن سلسلة Base64 مرمّزة غير صالحة "23435""، ستتلقّى رمز الخطأ:

    steps.basicauthentication.InvalidBasicAuthenticationSource

الدقة

تأكَّد من أنّ المتغيّر المحدّد للعنصر <Source> في السياسة BasicAuthentication يتضمّن سلسلة Base64 مرمّزة صالحة.

لحلّ المشكلة المتعلقة بنموذج سياسة BasicAuthentication التي تمت مناقشتها أعلاه، يمكنك تقديم طلب بيانات من واجهة برمجة التطبيقات من خلال إدخال سلسلة Base64 مرمّزة صالحة في عنوان التفويض كما هو موضّح أدناه:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

السبب: العنوان مكتوب بشكل غير صحيح أو غير صالح

يحدث هذا الخطأ إذا كان الرأس الذي تم تمريره إلى سياسة المصادقة الأساسية مكتوبًا بشكل غير صحيح أو غير صالح.

على سبيل المثال، يحدث هذا الخطأ إذا كانت سياسة BasicAuthentication تحتوي على متغيّر تم تحديده على أنّه request.header.Authorization في العنصر <Source> وكان العنوان الذي تم تمريره كجزء من طلب البيانات غير صالح أو غير صحيح.

التشخيص

  1. حدِّد المتغيّر المستخدَم للعنصر <Source> في سياسة BasicAuthentication. يمكنك العثور على هذه المعلومات في العنصر faultstring في استجابة الخطأ. على سبيل المثال، في الخطأ التالي، المتغير المستخدم للعنصر <Source> هو request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. افحص جميع سياسات BasicAuthentication في خادم وكيل واجهة برمجة التطبيقات المحدد حيث حدث الفشل. قد تكون هناك سياسة واحدة أو أكثر من سياسات BasicAuthentication. حدِّد سياسة BasicAuthentication المحدّدة التي يتطابق فيها المتغيّر المحدّد في العنصر <Source> مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة رقم 1 أعلاه).

    على سبيل المثال، تضبط السياسة التالية العنصر <Source> على متغيّر باسم request.header.Authorization، والذي يتطابق مع ما هو في 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. إذا كان المتغير عنوانًا بتنسيق غير صحيح أو غير صالح، أي أنّه لا يحتوي على نوع المصادقة أو إذا لم يكن نوع المصادقة "أساسي"، يكون هذا هو سبب الخطأ.

    يظهر رأس التفويض بالشكل التالي:

    Authorization: <Authentication type> <credentials>
    

    يمكن تمرير رأس تمت صياغته بشكل غير صحيح إلى سياسة BasicAuthentication بطريقتين:

    المثال 1: عدم توفُّر نوع مصادقة في العنوان:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: YWthc2g6MTIz"

    في المثال أعلاه، لا يحتوي عنوان التفويض على نوع المصادقة. في حال تمرير هذا الرأس إلى سياسة BasicAuthentication الموضحة أعلاه، ستتلقّى رمز الخطأ:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    مثال 2: نوع المصادقة ليس من النوع "أساسية":

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    في المثال أعلاه، لا يكون نوع المصادقة "أساسي" في عنوان "تفويض". في حال تمرير ذلك إلى سياسة BasicAuthentication الموضحة أعلاه، ستتلقّى رمز الخطأ:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    وبالمثل، يمكن أن يحدث هذا الخطأ أيضًا في حال استخدام نوع المصادقة، مثل الحامل أو مصادقة الملخص، وما إلى ذلك في رأس التفويض.

الدقة

تأكَّد من أنّ العنوان الذي يتم فيه تمرير الإدخال إلى سياسة BasicAuthentication له نوع مصادقة ويكون من النوع "أساسي".

لحلّ المشكلة المتعلّقة بنموذج سياسة BasicAuthentication التي تمت مناقشتها أعلاه، يمكنك تقديم طلب عبر واجهة برمجة التطبيقات من خلال إدخال سلسلة Base64 مرمّزة صالحة مع القيمة "Basic" نوع المصادقة في عنوان التفويض كما هو موضّح أدناه:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"