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

คุณกําลังดูเอกสารประกอบของ 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 Proxy ที่ทำให้เกิดข้อผิดพลาด อาจมีนโยบาย 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 ไม่ใช่สตริงที่เข้ารหัส 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 อย่างน้อย 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 Proxy ที่เฉพาะเจาะจงซึ่งเกิดข้อผิดพลาด อาจมีนโยบาย 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. หากตัวแปรเป็นส่วนหัวและมีรูปแบบไม่ถูกต้องหรือไม่ถูกต้อง เช่น ไม่มีประเภทการตรวจสอบสิทธิ์ หรือประเภทการตรวจสอบสิทธิ์ไม่ใช่ "พื้นฐาน" แสดงว่านี่คือสาเหตุของข้อผิดพลาด

    ส่วนหัวการให้สิทธิ์อยู่ในรูปแบบนี้

    Authorization: <Authentication type> <credentials>
    

    ส่วนหัวที่มีรูปแบบไม่ถูกต้องสามารถส่งไปยังนโยบาย BasicAuthentication ได้ 2 วิธี ดังนี้

    ตัวอย่างที่ 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"

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    ในทํานองเดียวกัน ข้อผิดพลาดนี้อาจเกิดขึ้นได้หากมีการใช้ประเภทการตรวจสอบสิทธิ์ เช่น Bearer, Digest Auth ฯลฯ ในส่วนหัวการให้สิทธิ์

ความละเอียด

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

หากต้องการแก้ไขปัญหาเกี่ยวกับนโยบาย BasicAuthentication ตัวอย่างที่กล่าวถึงข้างต้น ให้ส่งคําขอ API โดยส่งสตริงที่เข้ารหัส Base64 ที่ถูกต้องซึ่งมีประเภทการตรวจสอบสิทธิ์ "พื้นฐาน" ในส่วนหัวการให้สิทธิ์ ดังที่แสดงด้านล่าง

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