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

أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

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 كجزء من الطلب. وهذا يعني أنّه تم إرسال طلب واجهة برمجة التطبيقات بدون رأس 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 في عنوان Authorization كما هو موضّح أدناه:

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

السبب: العنوان غير صالح أو بتنسيق غير صحيح

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

على سبيل المثال، يحدث هذا الخطأ إذا كانت سياسة 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 على النحو التالي:

    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"

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

الدقة

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

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

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