นโยบายการตรวจสอบสิทธิ์พื้นฐาน

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

อะไร

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

นโยบายนี้ยังช่วยให้คุณถอดรหัสข้อมูลเข้าสู่ระบบที่จัดเก็บไว้ในสตริงที่เข้ารหัส Base64 เป็นชื่อผู้ใช้ และรหัสผ่านได้ด้วย

วิดีโอ: วิดีโอนี้แสดงวิธีเข้ารหัสชื่อผู้ใช้และ รหัสผ่านแบบ Base64 โดยใช้นโยบายการตรวจสอบสิทธิ์พื้นฐาน

วิดีโอ: วิดีโอนี้แสดงวิธีถอดรหัสชื่อผู้ใช้และ รหัสผ่านที่เข้ารหัส Base64 โดยใช้นโยบายการตรวจสอบสิทธิ์พื้นฐาน

ตัวอย่าง

การเข้ารหัสขาออก

<BasicAuthentication name="ApplyBasicAuthHeader">
   <DisplayName>ApplyBasicAuthHeader</DisplayName>
   <Operation>Encode</Operation>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <User ref="credentials.username" />
   <Password ref="credentials.password" />
   <AssignTo createNew="false">request.header.Authorization</AssignTo>
</BasicAuthentication>

ในการกำหนดค่านโยบายตัวอย่างข้างต้น ระบบจะดึงชื่อผู้ใช้และรหัสผ่านที่จะเข้ารหัสจากตัวแปรที่ระบุโดยref แอตทริบิวต์ใน<User> และ <Password> องค์ประกอบ คุณต้องตั้งค่าตัวแปร ก่อนที่นโยบายนี้จะทำงาน โดยปกติแล้ว ระบบจะป้อนค่าลงในตัวแปรโดยค่าที่ อ่านจากแผนที่คีย์/ค่า ดูนโยบายการดำเนินการแผนที่คีย์/ค่า

การกำหนดค่านี้จะส่งผลให้ระบบเพิ่มส่วนหัว HTTP ที่ชื่อว่าการให้สิทธิ์ ซึ่งระบุโดยองค์ประกอบ <AssignTo> ลงในข้อความคำขอขาออกที่ส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์ ดังนี้

Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk

ระบบจะเชื่อมค่า <User> และ <Password> ด้วยเครื่องหมายโคลอนก่อนที่จะเข้ารหัส Base64

สมมติว่าคุณมีแผนที่คีย์/ค่าที่มีรายการต่อไปนี้

{
  "encrypted" : true,
  "entry" : [ {
    "name" : "username",
    "value" : "MyUsername"
  }, {
    "name" : "password",
    "value" : "MyPassword"
  } ],
  "name" : "BasicAuthCredentials"
}
      

แนบนโยบาย KeyValueMapOperations ต่อไปนี้ก่อนนโยบาย BasicAuthentication เพื่อดึงค่าสำหรับองค์ประกอบ <User> และ <Password> จากที่เก็บคีย์/ค่า และป้อนค่าลงใน ตัวแปร credentials.username และ credentials.password

<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials">
  <Scope>apiproxy</Scope>
  <Get assignTo="credentials.username" index='1'>
    <Key>
      <Parameter>username</Parameter>
    </Key>
  </Get>
  <Get assignTo="credentials.password" index='1'>
    <Key>
      <Parameter>password</Parameter>
    </Key>
  </Get>
</KeyValueMapOperations>
      

การถอดรหัสขาเข้า

<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>

ในตัวอย่างนโยบายนี้ นโยบายจะถอดรหัสชื่อผู้ใช้และรหัสผ่านจาก Authorization ส่วนหัว HTTP ตามที่ระบุโดยองค์ประกอบ <Source> สตริงที่เข้ารหัส Base64 ต้องอยู่ในรูปแบบ Basic Base64EncodedString.

นโยบายจะเขียนชื่อผู้ใช้ที่ถอดรหัสแล้วลงในตัวแปร request.header.username และ รหัสผ่านที่ถอดรหัสแล้วลงในตัวแปร request.header.password


เกี่ยวกับนโยบายการตรวจสอบสิทธิ์พื้นฐาน

นโยบายนี้มีโหมดการทำงาน 2 โหมด

  • เข้ารหัส: เข้ารหัสชื่อผู้ใช้และรหัสผ่านที่จัดเก็บไว้ใน ตัวแปรแบบ Base64
  • ถอดรหัส: ถอดรหัสชื่อผู้ใช้และรหัสผ่านจาก สตริงที่เข้ารหัส Base64

โดยปกติแล้ว ระบบจะจัดเก็บชื่อผู้ใช้และรหัสผ่านไว้ในที่เก็บคีย์/ค่า แล้วอ่านจากที่เก็บคีย์/ค่าในรันไทม์ ดูรายละเอียดเกี่ยวกับการใช้ที่เก็บคีย์/ค่าได้ที่ นโยบายการดำเนินการแผนที่คีย์/ค่า

ข้อมูลอ้างอิงองค์ประกอบ

ข้อมูลอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบายการตรวจสอบสิทธิ์พื้นฐาน

<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
   <DisplayName>Basic Authentication 1</DisplayName>
   <Operation>Encode</Operation>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <User ref="credentials.username" />
   <Password ref="credentials.password" />
   <AssignTo createNew="false">request.header.Authorization</AssignTo>
   <Source>request.header.Authorization</Source> 
</BasicAuthentication>

แอตทริบิวต์ <BasicAuthentication>

<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">

ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name สามารถ ประกอบด้วยตัวอักษร ตัวเลข การเว้นวรรค ขีดกลางสั้น ขีดล่าง และจุด ค่านี้ไม่สามารถ เกิน 255 อักขระ

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ไม่มี ต้องระบุ
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย นโยบายจะไม่ บังคับใช้ แม้ว่าจะยังคงแนบกับขั้นตอน

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มี

หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ name ของนโยบายจะเป็น

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

องค์ประกอบ <Operation>

กำหนดว่านโยบายจะเข้ารหัสหรือถอดรหัสข้อมูลเข้าสู่ระบบแบบ Base64

<Operation>Encode</Operation>
ค่าเริ่มต้น: ไม่มี
การมีอยู่: ต้องระบุ
ประเภท:

สตริง

ค่าที่ใช้ได้ ได้แก่

  • เข้ารหัส
  • ถอดรหัส

องค์ประกอบ <IgnoreUnresolvedVariables>

เมื่อตั้งค่าเป็น true นโยบายจะไม่แสดงข้อผิดพลาดหากไม่สามารถแก้ปัญหาตัวแปรได้ เมื่อใช้ในบริบทของนโยบายการตรวจสอบสิทธิ์พื้นฐาน โดยปกติแล้วการตั้งค่านี้จะตั้งค่า เป็น false เนื่องจากโดยทั่วไปแล้วการแสดงข้อผิดพลาดหากไม่พบชื่อผู้ใช้หรือ รหัสผ่านในตัวแปรที่ระบุจะเป็นประโยชน์

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
ค่าเริ่มต้น: จริง
การมีอยู่: ไม่บังคับ
ประเภท:

บูลีน

องค์ประกอบ <User>

  • สำหรับการเข้ารหัส ให้ใช้องค์ประกอบ <User> เพื่อระบุตัวแปร ที่มีชื่อผู้ใช้ ระบบจะเชื่อมค่าชื่อผู้ใช้และรหัสผ่านด้วยเครื่องหมายโคลอนก่อนที่จะเข้ารหัส Base64
  • สำหรับการถอดรหัส ให้ระบุตัวแปรที่จะเขียนชื่อผู้ใช้ที่ถอดรหัสแล้ว
<User ref="credentials.username" /> 
ค่าเริ่มต้น: ไม่มี
การมีอยู่: ต้องระบุ
ประเภท:

ไม่มี

แอตทริบิวต์

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีอยู่
ref

ตัวแปรที่นโยบายอ่านชื่อผู้ใช้แบบไดนามิก (เข้ารหัส) หรือเขียน ชื่อผู้ใช้ (ถอดรหัส)

ไม่มี ต้องระบุ

องค์ประกอบ <Password>

  • สำหรับการเข้ารหัส ให้ใช้องค์ประกอบ <Password> เพื่อระบุตัวแปร ที่มีรหัสผ่าน
  • สำหรับการถอดรหัส ให้ระบุตัวแปรที่จะเขียนรหัสผ่านที่ถอดรหัสแล้ว
<Password ref="credentials.password" />
ค่าเริ่มต้น: ไม่มี
การมีอยู่: ต้องระบุ
ประเภท:

ไม่มี

แอตทริบิวต์

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีอยู่
ref

ตัวแปรที่นโยบายอ่านรหัสผ่านแบบไดนามิก (เข้ารหัส) หรือเขียน รหัสผ่าน (ถอดรหัส)

ไม่มี ต้องระบุ

องค์ประกอบ <AssignTo>

สำหรับการดำเนินการ Encode ให้ระบุตัวแปรเป้าหมายที่จะตั้งค่าด้วยค่าที่เข้ารหัส ที่สร้างขึ้นโดยนโยบายนี้

ตัวอย่างต่อไปนี้ระบุว่านโยบายควรตั้งค่าส่วนหัว Authorization ของข้อความเป็นค่าที่สร้างขึ้น

<AssignTo createNew="false">request.header.Authorization</AssignTo>
ค่าเริ่มต้น: ไม่มี
การมีอยู่: ต้องระบุสำหรับการดำเนินการ Encode
ประเภท:

สตริง

แอตทริบิวต์

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีอยู่
createNew กำหนดว่านโยบายควรเขียนทับตัวแปรหรือไม่หากมีการตั้งค่าตัวแปรไว้แล้ว

เมื่อตั้งค่าเป็น "false" การกำหนดตัวแปรจะเกิดขึ้น ก็ต่อเมื่อ ปัจจุบันไม่ได้ตั้งค่าตัวแปร (เป็นค่าว่าง)

เมื่อตั้งค่าเป็น "true" การกำหนดตัวแปรจะเกิดขึ้นเสมอ

โดยปกติแล้ว คุณจะตั้งค่าแอตทริบิวต์นี้เป็น "false" (ค่าเริ่มต้น)

เท็จ ไม่บังคับ

องค์ประกอบ <Source>

สำหรับการถอดรหัส ให้ระบุตัวแปรที่มีสตริงที่เข้ารหัส Base64 ในรูปแบบที่ เป็น Basic Base64EncodedString เช่น ระบุ request.header.Authorization ซึ่งสอดคล้องกับส่วนหัว การให้สิทธิ์

<Source>request.header.Authorization</Source>
ค่าเริ่มต้น: ไม่มี
การมีอยู่: ต้องระบุสำหรับการดำเนินการถอดรหัส
ประเภท:

ไม่มี

ตัวแปรโฟลว์

ระบบจะตั้งค่าตัวแปรโฟลว์ต่อไปนี้เมื่อนโยบายล้มเหลว

  • BasicAuthentication.{policy_name}.failed (มีค่าเป็น "จริง")

ข้อมูลอ้างอิงข้อผิดพลาด

ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการข้อผิดพลาดได้ หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
steps.basicauthentication.InvalidBasicAuthenticationSource 500 ในการถอดรหัสเมื่อสตริงที่เข้ารหัส Base64 ขาเข้าไม่มีค่าที่ถูกต้องหรือ ส่วนหัวมีรูปแบบไม่ถูกต้อง (เช่น ไม่ได้ขึ้นต้นด้วย "พื้นฐาน")
steps.basicauthentication.UnresolvedVariable 500 ไม่มีตัวแปรแหล่งที่มาที่จำเป็นสำหรับการถอดรหัสหรือเข้ารหัส ข้อผิดพลาดนี้อาจ จะเกิดขึ้นก็ต่อเมื่อ IgnoreUnresolvedVariables มีค่าเป็น "เท็จ"

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด เกิดขึ้นเมื่อ แก้ไข
UserNameRequired ต้องมีองค์ประกอบ <User> สำหรับการดำเนินการที่มีชื่อ
PasswordRequired ต้องมีองค์ประกอบ <Password> สำหรับการดำเนินการที่มีชื่อ
AssignToRequired ต้องมีองค์ประกอบ <AssignTo> สำหรับการดำเนินการที่มีชื่อ
SourceRequired ต้องมีองค์ประกอบ <Source> สำหรับการดำเนินการที่มีชื่อ

ตัวแปรความผิดพลาด

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

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด fault.name Matches "UnresolvedVariable"
BasicAuthentication.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด BasicAuthentication.BA-Authenticate.failed = true

ตัวอย่างการตอบสนองข้อผิดพลาด

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.basicauthentication.UnresolvedVariable"
      },
      "faultstring":"Unresolved variable : request.queryparam.password"
   }
}

ตัวอย่างกฎข้อผิดพลาด

<FaultRule name="Basic Authentication Faults">
    <Step>
        <Name>AM-UnresolvedVariable</Name>
        <Condition>(fault.name Matches "UnresolvedVariable") </Condition>
    </Step>
    <Step>
        <Name>AM-AuthFailedResponse</Name>
        <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition>
    </Step>
    <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition>
</FaultRule>

สคีมา

หัวข้อที่เกี่ยวข้อง

นโยบายการดำเนินการ แผนที่คีย์/ค่า