คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
อะไร
ทำให้คุณใช้การตรวจสอบสิทธิ์พื้นฐานขนาดเล็กเพื่อรักษาความปลอดภัยในขั้นตอนสุดท้ายได้ นโยบายจะใช้ชื่อผู้ใช้และรหัสผ่าน จากนั้นเข้ารหัส Base64 และเขียนค่าผลลัพธ์ลงในตัวแปร ค่าที่ได้จะอยู่ในรูปแบบ Basic
Base64EncodedString
โดยทั่วไปคุณจะเขียนค่านี้ไปยังส่วนหัว HTTP เช่น ส่วนหัว Authorization
นโยบายยังช่วยให้คุณถอดรหัสข้อมูลเข้าสู่ระบบที่จัดเก็บไว้ในสตริงที่เข้ารหัส Base64 เป็นชื่อผู้ใช้และรหัสผ่านได้ด้วย
วิดีโอ: วิดีโอนี้จะแสดงวิธีเข้ารหัส Base64 ชื่อผู้ใช้และรหัสผ่านโดยใช้นโยบายการตรวจสอบสิทธิ์ขั้นพื้นฐาน
วิดีโอ: วิดีโอนี้แสดงวิธีถอดรหัสชื่อผู้ใช้และรหัสผ่านที่เข้ารหัสแบบ Base64 โดยใช้นโยบายการตรวจสอบสิทธิ์พื้นฐาน
ลองฟัง
การเข้ารหัสขาออก
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="BasicAuth.credentials.username" /> <Password ref="BasicAuth.credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
ในการกำหนดค่านโยบายตัวอย่างข้างต้น ชื่อผู้ใช้และรหัสผ่านที่จะเข้ารหัสได้มาจากตัวแปรที่ระบุโดยแอตทริบิวต์ ref
ในองค์ประกอบ <User>
และ <Password>
ต้องตั้งค่าตัวแปรก่อนเรียกใช้นโยบายนี้ โดยปกติแล้ว ระบบจะป้อนข้อมูลตัวแปรโดยค่าที่อ่านจากแมปคีย์/ค่า ดูนโยบายการดำเนินการของแมปค่าคีย์
การกำหนดค่านี้จะส่งผลให้มีการเพิ่มส่วนหัว HTTP ที่ชื่อ Authorization ตามที่ระบุโดยองค์ประกอบ <AssignTo> ไว้ในข้อความคำขอขาออกที่ส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
ค่า <User>
และ <Password>
จะต่อกันด้วยโคลอนก่อนการเข้ารหัส Base64
โปรดตรวจสอบว่าคุณมีการแมปคีย์/ค่าซึ่งมีรายการต่อไปนี้
{ "encrypted" : true, "entry" : [ { "name" : "username", "value" : "MyUsername" }, { "name" : "password", "value" : "MyPassword" } ], "name" : "BasicAuthCredentials" }
แนบนโยบาย KeyValueMapEnforcement ต่อไปนี้ก่อนนโยบาย Basicการตรวจสอบสิทธิ์ เพื่อให้ดึงค่าสำหรับองค์ประกอบ <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>
ในตัวอย่างนโยบายนี้ นโยบายจะถอดรหัสชื่อผู้ใช้และรหัสผ่านจากส่วนหัว HTTP ของ Authorization
ตามที่ระบุโดยองค์ประกอบ <Source> สตริงที่เข้ารหัส Base64 ต้องอยู่ในรูปแบบ Basic Base64EncodedString.
นโยบายจะเขียนชื่อผู้ใช้ที่ถอดรหัสแล้วลงในตัวแปร request.header.username และรหัสผ่านที่ถอดรหัสแล้วไปยังตัวแปร request.header.password
เกี่ยวกับนโยบายการตรวจสอบสิทธิ์ขั้นพื้นฐาน
นโยบายมีการทำงาน 2 โหมด ได้แก่
- เข้ารหัส: Base64 เข้ารหัสชื่อผู้ใช้และรหัสผ่านที่เก็บไว้ในตัวแปร
- ถอดรหัส: ถอดรหัสชื่อผู้ใช้และรหัสผ่านจากสตริงที่เข้ารหัส Base64
โดยทั่วไประบบจะเก็บชื่อผู้ใช้และรหัสผ่านไว้ในที่เก็บคีย์/ค่า จากนั้นอ่านจากที่เก็บคีย์/ค่าระหว่างรันไทม์ ดูรายละเอียดเกี่ยวกับการใช้ที่เก็บคีย์/ค่าได้ที่นโยบายการดำเนินการแมปค่าคีย์
การอ้างอิงองค์ประกอบ
การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย Basic Authentication
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1"> <DisplayName>Basic Authentication 1</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.queryparam.username" /> <Password ref="request.queryparam.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> <Source>request.header.Authorization</Source> </BasicAuthentication>
แอตทริบิวต์ <Basic Authentication>
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มีข้อมูล | จำเป็น |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
false | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
false | เลิกใช้ |
องค์ประกอบ <DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มีข้อมูล หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
Type | สตริง |
องค์ประกอบ <การดำเนินการ>
กำหนดว่านโยบาย Base64 จะเข้ารหัสหรือถอดรหัสข้อมูลเข้าสู่ระบบหรือไม่
<Operation>Encode</Operation>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | จำเป็น |
ประเภท: |
สตริง ค่าที่ถูกต้องได้แก่
|
องค์ประกอบ < ignoreUnresolvedVariable>
เมื่อตั้งค่าเป็น true
นโยบายจะไม่แสดงข้อผิดพลาดหากแก้ไขตัวแปรไม่ได้ เมื่อใช้ในบริบทของนโยบาย Basic Authentication การตั้งค่านี้มักจะตั้งไว้ที่ false
เพราะปกติแล้วการแสดงข้อผิดพลาดจะเป็นประโยชน์ในกรณีที่ไม่พบชื่อผู้ใช้หรือรหัสผ่านในตัวแปรที่ระบุ
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
ค่าเริ่มต้น: | จริง |
สถานที่ตั้ง: | ไม่บังคับ |
ประเภท: |
บูลีน |
องค์ประกอบของ <User>
- สำหรับการเข้ารหัส ให้ใช้องค์ประกอบ
<User>
เพื่อระบุตัวแปรที่มีชื่อผู้ใช้ ค่าของชื่อผู้ใช้และรหัสผ่านจะต่อกันด้วยโคลอนก่อนการเข้ารหัส Base64 - สำหรับการถอดรหัส ให้ระบุตัวแปรที่ใช้เขียนชื่อผู้ใช้ที่ถอดรหัส
<User ref="request.queryparam.username" />
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | จำเป็น |
ประเภท: |
ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
อ้างอิง |
ตัวแปรที่นโยบายอ่านชื่อผู้ใช้ (เข้ารหัส) แบบไดนามิกหรือเขียนชื่อผู้ใช้ (ถอดรหัส) |
ไม่มีข้อมูล | จำเป็น |
องค์ประกอบของ <Password>
- สำหรับการเข้ารหัส ให้ใช้องค์ประกอบ
<Password>
เพื่อระบุตัวแปรที่มีรหัสผ่าน - สำหรับการถอดรหัส ให้ระบุตัวแปรที่ใช้เขียนรหัสผ่านที่ถอดรหัส
<Password ref="request.queryparam.password" />
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | จำเป็น |
ประเภท: |
ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
อ้างอิง |
ตัวแปรที่นโยบายจะอ่านรหัสผ่าน (เข้ารหัส) แบบไดนามิกหรือเขียนรหัสผ่าน (ถอดรหัส) |
ไม่มีข้อมูล | จำเป็น |
องค์ประกอบ <AssignTo>
ระบุตัวแปรเป้าหมายที่จะตั้งค่าด้วยค่าที่เข้ารหัสหรือถอดรหัสที่นโยบายนี้สร้างขึ้น
ตัวอย่างต่อไปนี้ระบุว่านโยบายควรตั้งค่าส่วนหัว Authorization
ของข้อความเป็นค่าที่สร้างขึ้น
<AssignTo createNew="false">request.header.Authorization</AssignTo>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | จำเป็น |
ประเภท: |
สตริง |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
createNew | กำหนดว่านโยบายควรเขียนทับตัวแปรหรือไม่ หากมีการตั้งค่าตัวแปรไว้แล้ว
เมื่อตั้งค่าเป็น "false" การกำหนดให้กับตัวแปรจะเกิดขึ้นเฉพาะกรณีที่ตัวแปรยังไม่ได้ตั้งค่าในขณะนี้ (ค่าว่าง) เมื่อมีค่าเป็น "true" การกำหนดตัวแปรจะเกิดขึ้นเสมอ โดยปกติ คุณจะตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" (ค่าเริ่มต้น) |
false | ไม่บังคับ |
องค์ประกอบ <Source>
สำหรับการถอดรหัส ตัวแปรที่มีสตริงที่เข้ารหัส Base64 ในรูปแบบ Basic
Base64EncodedString
ตัวอย่างเช่น ระบุ request.header.Authorization
ที่สอดคล้องกับส่วนหัว Authorization
<Source>request.header.Authorization</Source>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | จำเป็นสำหรับการดำเนินการถอดรหัส |
ประเภท: |
ไม่มีข้อมูล |
ตัวแปรโฟลว์
ระบบจะตั้งค่าตัวแปรโฟลว์ต่อไปนี้เมื่อนโยบายล้มเหลว
BasicAuthentication.{policy_name}.failed
(มีค่าเป็น true)
การอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ 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>