คุณกำลังดูเอกสารประกอบของ 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 |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
| ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
|---|---|
| การมีบุคคลอยู่ | ไม่บังคับ |
| ประเภท | สตริง |
องค์ประกอบ <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 ขาเข้าไม่มีค่าที่ถูกต้องหรือ ส่วนหัวมีรูปแบบไม่ถูกต้อง (เช่น ไม่ได้ขึ้นต้นด้วย "พื้นฐาน") | build |
steps.basicauthentication.UnresolvedVariable |
500 | ไม่มีตัวแปรแหล่งที่มาที่จำเป็นสำหรับการถอดรหัสหรือเข้ารหัส ข้อผิดพลาดนี้อาจ
จะเกิดขึ้นก็ต่อเมื่อ IgnoreUnresolvedVariables มีค่าเป็น "เท็จ" |
build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
| ชื่อข้อผิดพลาด | เกิดขึ้นเมื่อ | แก้ไข |
|---|---|---|
UserNameRequired |
ต้องมีองค์ประกอบ <User> สำหรับการดำเนินการที่มีชื่อ |
build |
PasswordRequired |
ต้องมีองค์ประกอบ <Password> สำหรับการดำเนินการที่มีชื่อ |
build |
AssignToRequired |
ต้องมีองค์ประกอบ <AssignTo> สำหรับการดำเนินการที่มีชื่อ |
build |
SourceRequired |
ต้องมีองค์ประกอบ <Source> สำหรับการดำเนินการที่มีชื่อ |
build |
ตัวแปรความผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อเกิดข้อผิดพลาดรันไทม์ โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบาย
| ตัวแปร | สถานที่ | ตัวอย่าง |
|---|---|---|
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>