عیب یابی خطای زمان اجرا خط مشی اصلی احراز هویت

شما در حال مشاهده اسناد 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> تعیین شده باشد، اما سرصفحه Authorization به عنوان بخشی از درخواست API ارسال نشود.

تشخیص

  1. متغیر مورد استفاده برای عنصر <Source> در خط مشی BasicAuthentication را شناسایی کنید. شما می توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring, متغیر مورد استفاده برای عنصر <Source> request.header.Authorization است:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. تمام خط مشی های BasicAuthentication را در پروکسی API خاصی که در آن شکست رخ داده است، بررسی کنید. ممکن است یک یا چند خط مشی 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 به عنوان بخشی از درخواست ارسال نشد. یعنی درخواست API بدون هدر Authorization مطابق شکل زیر انجام شده است:

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

    از آنجایی که متغیر مورد استفاده در خط مشی BasicAuthentication در دسترس نیست، کد خطا را دریافت می کنید:

    steps.basicauthentication.UnresolvedVariable
    

قطعنامه

اطمینان حاصل کنید که متغیر مورد استفاده در خط مشی BasicAuthentication به عنوان ورودی تعریف یا ارسال شده است و در جریانی که این خط مشی اجرا می شود موجود است.

برای رفع مشکل با نمونه خط مشی احراز هویت پایه که در بالا مورد بحث قرار گرفت، یک درخواست API را مطابق شکل زیر انجام دهید:

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 را در پروکسی API خاصی که در آن شکست رخ داده است، بررسی کنید. ممکن است یک یا چند خط مشی 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 که در بالا توضیح داده شد، یک درخواست API با ارسال یک رشته رمزگذاری شده معتبر Base64 در سرصفحه Authorization مطابق شکل زیر ایجاد کنید:

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

علت: هدر نادرست است/نامعتبر است

اگر هدر ارسال شده به خط مشی BasicAuthentication نادرست یا نامعتبر باشد، این خطا رخ می دهد.

برای مثال، این خطا در صورتی رخ می‌دهد که خط‌مشی BasicAuthentication دارای متغیری باشد که به‌عنوان request.header.Authorization مشخص شده است. مجوز در عنصر <Source> و هدر ارسال شده به عنوان بخشی از درخواست API نادرست/نامعتبر باشد.

تشخیص

  1. متغیر مورد استفاده برای عنصر <Source> در خط مشی BasicAuthentication را شناسایی کنید. شما می توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در خطای زیر، متغیر مورد استفاده برای عنصر <Source> request.header.Authorization است:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. تمام خط مشی های BasicAuthentication را در پروکسی API خاصی که در آن شکست رخ داده است، بررسی کنید. ممکن است یک یا چند خط مشی 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. اگر متغیر یک هدر باشد و بدشکل یا نامعتبر باشد، یعنی نوع احراز هویت را نداشته باشد یا اگر نوع احراز هویت "Basic" نباشد، این دلیل خطا است.

    سربرگ Authorization به این شکل است:

    Authorization: <Authentication type> <credentials>
    

    هدر ناقص را می توان به دو روش به خط مشی BasicAuthentication ارسال کرد:

    مثال 1 : بدون نوع احراز هویت در هدر:

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

    در مثال بالا، هدر Authorization نوع Authentication را ندارد. اگر این هدر به خط مشی BasicAuthentication نشان داده شده در بالا ارسال شود، کد خطا را دریافت می کنید:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    مثال 2 : نوع احراز هویت از نوع "Basic" نیست:

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

    در مثال بالا، هدر Authorization نوع Authentication "Basic" را ندارد. اگر این به خط‌مشی BasicAuthentication نشان داده شده در بالا منتقل شود، کد خطا را دریافت می‌کنید:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    به طور مشابه، اگر از نوع Authentication مانند Bearer، Digest Auth و غیره در هدر Authorization استفاده شود، این خطا نیز می تواند رخ دهد.

قطعنامه

اطمینان حاصل کنید که هدری که در آن ورودی خط‌مشی BasicAuthentication ارسال می‌شود، از نوع Authentication و از نوع "Basic" باشد.

برای رفع مشکل با نمونه خط مشی احراز هویت پایه که در بالا توضیح داده شد، با ارسال یک رشته رمزگذاری شده معتبر Base64 با نوع احراز هویت "Basic" در سرصفحه Authorization همانطور که در زیر نشان داده شده است، یک درخواست API ایجاد کنید:

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