คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
อะไร
ช่วยให้คุณสามารถใช้การตรวจสอบสิทธิ์พื้นฐานขนาดเล็กสำหรับ
การรักษาความปลอดภัยแบบสุดท้าย นโยบายนี้จะใช้ชื่อผู้ใช้และรหัสผ่าน Base64 จะเข้ารหัส แล้วเขียน
ให้เป็นตัวแปร ค่าที่ได้จะอยู่ในรูปแบบ Basic
Base64EncodedString
โดยทั่วไปแล้ว คุณจะเขียนค่านี้ลงในส่วนหัว HTTP เช่น
ส่วนหัว Authorization
นโยบายนี้ยังให้คุณถอดรหัสข้อมูลเข้าสู่ระบบที่เก็บไว้ในสตริงที่เข้ารหัส Base64 เป็นชื่อผู้ใช้ได้ด้วย และรหัสผ่าน
วิดีโอ: วิดีโอนี้แสดงวิธีเข้ารหัส base64 และชื่อผู้ใช้ โดยใช้นโยบายการตรวจสอบสิทธิ์พื้นฐาน
วิดีโอ: วิดีโอนี้จะแสดงวิธีถอดรหัสชื่อผู้ใช้ที่เข้ารหัสฐาน 64 และ โดยใช้นโยบายการตรวจสอบสิทธิ์พื้นฐาน
ตัวอย่าง
การเข้ารหัสขาออก
<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" }
แนบนโยบาย 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>
ในตัวอย่างของนโยบายนี้ นโยบายนี้จะถอดรหัสชื่อผู้ใช้และรหัสผ่านจาก
ส่วนหัว HTTP ของ Authorization
ตามที่ระบุไว้โดยองค์ประกอบ <Source> Base64
สตริงที่เข้ารหัสต้องอยู่ในรูปแบบ Basic Base64EncodedString.
นโยบายจะเขียนชื่อผู้ใช้ที่ถอดรหัสลงในตัวแปร request.header.username และ รหัสผ่านที่ถอดรหัสแล้วไปยังตัวแปร request.header.password
เกี่ยวกับนโยบายการตรวจสอบสิทธิ์ขั้นพื้นฐาน
นโยบายนี้มีการทำงาน 2 โหมด ได้แก่
- การเข้ารหัส: Base64 จะเข้ารหัสชื่อผู้ใช้และรหัสผ่านที่จัดเก็บไว้ใน ตัวแปร
- ถอดรหัส: ถอดรหัสชื่อผู้ใช้และรหัสผ่านจาก สตริงที่เข้ารหัส Base64
โดยทั่วไประบบจะเก็บชื่อผู้ใช้และรหัสผ่านไว้ในที่จัดเก็บคีย์/ค่า แล้วอ่านจาก จัดเก็บคีย์/ค่าขณะรันไทม์ ดูรายละเอียดเกี่ยวกับการใช้พื้นที่เก็บข้อมูลคีย์/ค่าได้ที่การดำเนินการแมปค่าคีย์
การอ้างอิงองค์ประกอบ
การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของ BasicAuthentication
<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>
<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
นโยบายจะไม่แสดงข้อผิดพลาดหากตัวแปรไม่สามารถ
แก้ปัญหาแล้ว เมื่อใช้ในบริบทของนโยบาย BasicAuthentication ระบบจะใช้การตั้งค่านี้
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" การกำหนดให้กับตัวแปรจะเกิดขึ้นเฉพาะเมื่อตัวแปรคือ ยังไม่ได้ตั้งค่าในขณะนี้ (null) เมื่อเป็น "จริง" การกำหนดให้กับตัวแปรจะเกิดขึ้นเสมอ โดยปกติแล้ว คุณจะตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" (ค่าเริ่มต้น) |
เท็จ | ไม่บังคับ |
<Source> องค์ประกอบ
ในการถอดรหัส ตัวแปรที่มีสตริงที่เข้ารหัส Base64 ในฟิลด์
แบบฟอร์ม Basic
Base64EncodedString
ตัวอย่างเช่น
ระบุ request.header.Authorization
โดยสอดคล้องกับส่วนหัว Authorization
<Source>request.header.Authorization</Source>
ค่าเริ่มต้น: | ไม่มี |
การตรวจหาบุคคล: | จำเป็นสำหรับการดำเนินการถอดรหัส |
ประเภท: |
ไม่มี |
ตัวแปรโฟลว์
ระบบจะตั้งค่าตัวแปรโฟลว์ต่อไปนี้เมื่อนโยบายล้มเหลว
BasicAuthentication.{policy_name}.failed
(ที่มีค่าเป็น "จริง")
ข้อมูลอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่ส่งกลับ และตัวแปรข้อผิดพลาดที่ Edge กำหนดไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้สำคัญต่อการพัฒนากฎข้อบกพร่องเพื่อจัดการข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดด้านนโยบายและการจัดการข้อบกพร่อง
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อบกพร่อง | สถานะ HTTP | สาเหตุ | แก้ไข |
---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | ในการถอดรหัสเมื่อสตริงที่เข้ารหัส Base64 ขาเข้าไม่มีค่าที่ถูกต้องหรือส่วนหัวมีรูปแบบไม่ถูกต้อง (เช่น ไม่ได้ขึ้นต้นด้วย "Basic") | 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>