การแก้ปัญหาข้อผิดพลาดเกี่ยวกับรันไทม์ของนโยบายการตรวจสอบสิทธิ์พื้นฐาน

คุณกำลังดูเอกสารประกอบ 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> แต่ไม่มีการส่งส่วนหัวการให้สิทธิ์ที่เป็นส่วนหนึ่งของคำขอ API

การวินิจฉัย

  1. ระบุตัวแปรที่ใช้สำหรับองค์ประกอบ <Source> ในนโยบาย BasicAuthentication คุณดูข้อมูลนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด ตัวอย่างเช่น ใน faultstring, ต่อไปนี้ ตัวแปรที่ใช้กับองค์ประกอบ <Source> คือ request.header.Authorization

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. ตรวจสอบนโยบาย BasicAuthentication ทั้งหมดในพร็อกซี API เฉพาะที่เกิดความล้มเหลวขึ้น อาจมีนโยบาย BasicAuthentication อย่างน้อย 1 รายการ ระบุนโยบาย 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 สร้างขึ้นโดยไม่มีส่วนหัวการให้สิทธิ์ดังที่แสดงด้านล่าง

    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"

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 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 เฉพาะที่เกิดความล้มเหลวขึ้น อาจมีนโยบาย BasicAuthentication อย่างน้อย 1 รายการ ระบุนโยบาย BasicAuthentication (ies) เฉพาะที่ตัวแปรที่ระบุในองค์ประกอบ <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 ที่ถูกต้องในส่วนหัวการให้สิทธิ์ดังที่แสดงด้านล่าง

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 อย่างน้อย 1 รายการ ระบุนโยบาย BasicAuthentication (ies) เฉพาะที่ตัวแปรที่ระบุในองค์ประกอบ <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 ได้ 2 วิธี ดังนี้

    ตัวอย่างที่ 1: ไม่มีประเภทการตรวจสอบสิทธิ์ในส่วนหัว:

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

    ในตัวอย่างข้างต้น ส่วนหัว Authorization ไม่มีประเภทการตรวจสอบสิทธิ์ หากระบบส่งส่วนหัวนี้ไปยังนโยบาย BasicAuthentication ที่แสดงด้านบน คุณจะได้รับรหัสข้อผิดพลาด ดังนี้

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    ตัวอย่างที่ 2: ประเภทการตรวจสอบสิทธิ์ไม่ใช่ประเภท "พื้นฐาน"

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

    ในตัวอย่างข้างต้น ส่วนหัวการให้สิทธิ์ไม่มีประเภทการตรวจสอบสิทธิ์เป็น "พื้นฐาน" หากส่งต่อค่าไปยังนโยบาย BasicAuthentication ดังที่แสดงด้านบน คุณจะได้รับรหัสข้อผิดพลาด ดังนี้

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    เช่นเดียวกัน ข้อผิดพลาดนี้อาจเกิดขึ้นหากใช้ประเภทการตรวจสอบสิทธิ์ เช่น ผู้ถือ การตรวจสอบสิทธิ์ไดเจสต์ ฯลฯ ในส่วนหัวการให้สิทธิ์

ความละเอียด

ตรวจสอบว่าส่วนหัวที่ส่งอินพุตไปยังนโยบาย BasicAuthentication เป็นประเภทการตรวจสอบสิทธิ์และเป็นประเภท "พื้นฐาน"

หากต้องการแก้ปัญหากับตัวอย่างนโยบาย BasicAuthentication ที่อธิบายข้างต้น ให้ส่งคำขอ API โดยการส่งสตริงที่เข้ารหัส Base64 ที่ถูกต้องด้วย "Basic" ประเภทการตรวจสอบสิทธิ์ในส่วนหัวการให้สิทธิ์ดังที่แสดงด้านล่าง

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