عیب‌یابی خطای زمان اجرای خط‌مشی «اصالت‌سنجی پایه»

درحال مشاهده اسناد 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> از خط‌مشی «احراز هویت پایه» مشخص شده است، یکی از موارد زیر باشد:

  • خارج از محدوده (در جریان خاصی که خط‌مشی در آن اجرا می‌شود دردسترس نیست)
  • حل‌وفصل نشد (تعریف نشده است)

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

تشخیص

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

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

  4. اگر متغیر یکی از این موارد باشد:

    1. خارج از محدوده (در جریان خاصی که خط‌مشی در آن اجرا می‌شود دردسترس نیست)
    2. حل‌وفصل نشد (تعریف نشده است)

    پس این دلیل خطا است.

    در خط‌مشی BasicAuthentication مثال نشان‌داده‌شده در بالا، متغیر request.header.Authorizationبه‌عنوان بخشی از درخواست ارسال نشده است. یعنی درخواست API بدون سرایند «مجوز» همان‌طور که در زیر نشان داده شده است انجام شده است:

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

    ازآنجایی‌که متغیر استفاده‌شده در خط‌مشی «احراز هویت پایه» دردسترس نیست، کد خطای زیر را دریافت می‌کنید:

    steps.basicauthentication.UnresolvedVariable
    

وضوح

مطمئن شوید متغیر استفاده‌شده در خط‌مشی «احراز هویت پایه» تعریف شده باشد یا به‌عنوان ورودی ارسال شده باشد و در جریانی که خط‌مشی در آن اجرا می‌شود دردسترس باشد.

برای رفع مشکل خط‌مشی نمونه 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 که به خط‌مشی «احراز هویت پایه» ارسال شده است ناهنجار است.

دلیل: متغیر منبع نامعتبر

این خطا زمانی رخ می‌دهد که متغیر حاوی رشته کدبندی‌شده Base64 که در عنصر <Source> از خط‌مشی «احراز هویت پایه» مشخص شده است مقدار معتبری نداشته باشد.

برای مثال، اگر متغیر مشخص‌شده در عنصر <Source> خط‌مشی «احراز هویت پایه» رشته کدبندی‌شده Base64 معتبری نداشته باشد، این خطا رخ می‌دهد.

تشخیص

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

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. همه خط‌مشی‌های «احراز هویت پایه» را در «پراکسی API» خاصی که در آن خرابی رخ داده است بررسی کنید. ممکن است یک یا چند خط‌مشی «احراز هویت پایه» وجود داشته باشد. خط‌مشی (های) 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> در خط‌مشی «احراز هویت پایه» رشته کدبندی‌شده Base64 معتبری داشته باشد.

برای رفع مشکل خط‌مشی نمونه BasicAuthentication که در بالا بحث شد، با ارسال رشته کدبندی‌شده Base64 معتبر در سرصفحه «مجوز» همان‌طور که در زیر نشان داده شده است، درخواست API ایجاد کنید:

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

دلیل: سرایند ناقص/نامعتبر است

اگر سرایند ارسال‌شده به خط‌مشی «احراز هویت پایه» بدفرم یا نامعتبر باشد، این خطا رخ می‌دهد.

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

تشخیص

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

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

    سرایند «مجوز» به این شکل است:

    Authorization: <Authentication type> <credentials>
    

    سرایند ناقص می‌تواند به دو روش به خط‌مشی «احراز هویت پایه» منتقل شود:

    مثال ۱: نوع «اصالت‌سنجی» در «سرصفحه» وجود ندارد:

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

    در مثال بالا، سرصفحه «مجوز» نوع «اصالت‌سنجی» را ندارد. اگر این سرایند به خط‌مشی «احراز هویت پایه» که در بالا نشان داده شده است ارسال شود، کد خطای زیر را دریافت می‌کنید:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    مثال ۲: نوع اصالت‌سنجی از نوع «پایه» نیست:

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

    در مثال بالا، سرصفحه «مجوز» نوع «اصالت‌سنجی» «پایه» را ندارد. اگر این به خط‌مشی «احراز هویت پایه» که در بالا نشان داده شده است ارسال شود، کد خطای زیر را دریافت می‌کنید:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    به‌همین ترتیب، اگر از نوع «اصالت‌سنجی» مثل «حامل»، «اصالت‌سنجی خلاصه»، و غیره در سرایند «مجوز» استفاده شود، این خطا نیز ممکن است رخ دهد.

وضوح

مطمئن شوید سرصفحه‌ای که ورودی خط‌مشی «اصالت‌سنجی پایه» در آن منتقل می‌شود دارای نوع «اصالت‌سنجی» است و از نوع «پایه» است.

برای رفع مشکل خط‌مشی نمونه BasicAuthentication که در بالا بحث شد، با ارسال رشته کدبندی‌شده معتبر Base64 با نوع «Basic» در سرصفحه «مجوز» همان‌طور که در زیر نشان داده شده است، درخواست میانای برنامه‌سازی کاربردی ایجاد کنید:

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