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

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

حل نشدهمتغیر

کد خطا

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 Proxy خاص که در آن خرابی رخ داده است، بررسی کنید. ممکن است یک یا چند سیاست BasicAuthentication وجود داشته باشد. سیاست یا سیاست‌های BasicAuthentication خاصی را که در آن متغیر مشخص شده در عنصر <Source> با نام متغیر شناسایی شده در رشته خطا (مرحله ۱ بالا) مطابقت دارد، شناسایی کنید.

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

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

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

منبع احراز هویت پایه نامعتبر

کد خطا

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 Policy یک رشته کدگذاری شده 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 Proxy خاص که در آن خرابی رخ داده است، بررسی کنید. ممکن است یک یا چند سیاست BasicAuthentication وجود داشته باشد. سیاست (یا سیاست‌های) BasicAuthentication خاصی را که در آن متغیر مشخص شده در عنصر <Source> با نام متغیر شناسایی شده در رشته خطا (مرحله ۱ در بالا) مطابقت دارد، شناسایی کنید.

    برای مثال، سیاست زیر عنصر <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، همانطور که در زیر نشان داده شده است، یک درخواست API ارسال کنید:

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 Proxy خاص که در آن خرابی رخ داده است، بررسی کنید. ممکن است یک یا چند سیاست BasicAuthentication وجود داشته باشد. سیاست (یا سیاست‌های) BasicAuthentication خاصی را که در آن متغیر مشخص شده در عنصر <Source> با نام متغیر شناسایی شده در رشته خطا (مرحله ۱ در بالا) مطابقت دارد، شناسایی کنید.

    برای مثال، سیاست زیر عنصر <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: <Authentication type> <credentials>
    

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

    مثال ۱ : هیچ نوع احراز هویتی در هدر وجود ندارد:

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

وضوح تصویر

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

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

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