หนึ่ง. ภาพรวมของการรับรองพื้นฐาน
ในระหว่างกระบวนการสื่อสารโปรโตคอล HTTP โปรโตคอล HTTP จะกำหนดกระบวนการตรวจสอบความถูกต้องขั้นพื้นฐานเพื่อให้เซิร์ฟเวอร์ HTTP ดำเนินการบัตรประจำตัวผู้ใช้บนเว็บเบราว์เซอร์ เมื่อไคลเอนต์ส่งคำขอข้อมูลไปยังเซิร์ฟเวอร์ HTTP หากไคลเอนต์ไม่ได้รับการรับรองความถูกต้องเซิร์ฟเวอร์ HTTP จะตรวจสอบชื่อผู้ใช้และรหัสผ่านของลูกค้าผ่านกระบวนการตรวจสอบความถูกต้องพื้นฐานเพื่อพิจารณาว่าผู้ใช้ถูกกฎหมายหรือไม่ หลังจากได้รับคำขอการรับรองความถูกต้องประจำตัวของเซิร์ฟเวอร์ HTTP ไคลเอนต์จะแจ้งให้ผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่านจากนั้นเข้ารหัสชื่อผู้ใช้และรหัสผ่านด้วย BASE64 ciphertext ที่เข้ารหัสจะถูกแนบกับข้อมูลคำขอ ตัวอย่างเช่นเมื่อชื่อผู้ใช้คือ Anjuta และรหัสผ่านคือ: 123456 ไคลเอนต์จะรวมชื่อผู้ใช้และรหัสผ่านด้วย ":" และเข้ารหัสสตริงที่ผสานกับ Base64 เป็น ciphertext และผนวก Ciphertext เข้ากับส่วนหัวคำขอทุกครั้งที่มีการร้องขอข้อมูล หลังจากแต่ละครั้งที่เซิร์ฟเวอร์ HTTP ได้รับแพ็คเก็ตคำขอจะได้รับข้อมูลผู้ใช้ที่แนบมากับไคลเอนต์ (BASE64 เข้ารหัสชื่อผู้ใช้และรหัสผ่าน) ตามโปรโตคอลให้ถอดแพ็คเก็ตคำขอและตรวจสอบชื่อผู้ใช้และรหัสผ่าน หากชื่อผู้ใช้และรหัสผ่านถูกต้องจะส่งคืนข้อมูลที่ลูกค้าต้องการตามคำขอของลูกค้า มิฉะนั้นจะส่งคืนรหัสข้อผิดพลาดหรือตอบกลับลูกค้าอีกครั้งเพื่อให้ชื่อผู้ใช้และรหัสผ่าน
สอง. กระบวนการรับรองขั้นพื้นฐาน
1. ไคลเอนต์ร้องขอข้อมูลจากเซิร์ฟเวอร์และเนื้อหาที่ร้องขออาจเป็นหน้าเว็บหรือประเภท MIME อื่น ในเวลานี้สมมติว่าลูกค้ายังไม่ได้รับการตรวจสอบแล้วไคลเอนต์จะให้คำขอต่อไปนี้กับเซิร์ฟเวอร์:
get /index.html http /1.0
โฮสต์: www.google.com
2. เซิร์ฟเวอร์ส่งรหัสคำขอยืนยัน 401 ไปยังไคลเอนต์และข้อมูลที่ส่งคืนโดยเซิร์ฟเวอร์มีดังนี้:
http/1.0 401 ไม่ได้รับอนุญาต
เซิร์ฟเวอร์: Sokevo/1.0
www-authenticate: พื้นฐาน Realm = "google.com"
ประเภทเนื้อหา: ข้อความ/html
ความยาวเนื้อหา: xxx
3. เมื่อลูกค้าเป็นไปตามข้อกำหนด HTTP1.0 หรือ 1.1 (เช่น IE, Firefox) ได้รับค่าส่งคืน 401 หน้าต่างเข้าสู่ระบบจะปรากฏขึ้นโดยอัตโนมัติโดยกำหนดให้ผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่าน
4. หลังจากผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่านชื่อผู้ใช้และรหัสผ่านจะถูกเข้ารหัสในการเข้ารหัส Base64 และ CipherText จะถูกวางไว้ในข้อมูลคำขอก่อนหน้า ข้อมูลคำขอแรกที่ส่งโดยลูกค้าจะกลายเป็นเนื้อหาต่อไปนี้:
get /index.html http /1.0
โฮสต์: www.google.com
การอนุญาต: พื้นฐาน xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxX
หมายเหตุ: xxxx .... แสดงชื่อผู้ใช้และรหัสผ่านที่เข้ารหัส
5. หลังจากได้รับข้อมูลคำขอข้างต้นเซิร์ฟเวอร์จะดึงและถอดรหัสข้อมูลผู้ใช้หลังจากฟิลด์การอนุญาตและเปรียบเทียบและตรวจสอบชื่อผู้ใช้และรหัสผ่านที่ถอดรหัสด้วยฐานข้อมูลผู้ใช้ หากชื่อผู้ใช้และรหัสผ่านถูกต้องเซิร์ฟเวอร์จะส่งทรัพยากรที่ร้องขอไปยังไคลเอนต์ตามคำขอ:
สาม. ข้อเสียของการรับรองขั้นพื้นฐาน
เป้าหมายของการตรวจสอบความถูกต้องพื้นฐาน HTTP คือการให้ฟังก์ชั่นการตรวจสอบผู้ใช้อย่างง่าย กระบวนการตรวจสอบความถูกต้องนั้นง่ายและชัดเจนและเหมาะสำหรับระบบหรืออุปกรณ์ที่มีข้อกำหนดด้านความปลอดภัยต่ำ ตัวอย่างเช่นการรับรองความถูกต้องของหน้าการกำหนดค่าของเราเตอร์ที่ใช้โดยทุกคนมักจะนำมาใช้เกือบทุกครั้ง ข้อเสียคือไม่มีกลยุทธ์การตรวจสอบความถูกต้องที่ยืดหยุ่นและเชื่อถือได้เช่นการไร้ความสามารถในการจัดทำฟังก์ชั่นการตรวจสอบโดเมน (โดเมนหรืออาณาจักร) นอกจากนี้ความแข็งแรงของการเข้ารหัสของ Base64 นั้นต่ำมากซึ่งสามารถป้องกันการค้นหาของ Sohu จากการค้นหาเท่านั้น แน่นอนว่าระบบตรวจสอบความถูกต้องพื้นฐาน HTTP สามารถรวมกับ SSL หรือ Kerberos เพื่อให้ได้ระบบการตรวจสอบด้วยประสิทธิภาพความปลอดภัยสูง (ค่อนข้าง)
สี่. รหัสการใช้งาน Java ที่ผ่านการรับรองขั้นพื้นฐาน
httpsession session = request.getSession (); string user = (string) session.getAttribute ("ผู้ใช้"); สตริงผ่าน; if (user == null) {ลอง {response.Setcharacterencoding ("GBK"); printwriter ut = response.getWriter (); การอนุมัติสตริง = request.getheader ("การอนุญาต"); if (Authorization == NULL || Authorization.equals ("")) {response.setStatus (401); Response.Setheader ("www-authenticate", "Realm พื้นฐาน =/" โปรดป้อนรหัสผ่านของผู้ดูแลระบบ/""); out.print ("ขออภัยที่ไม่ได้รับอนุญาต !!"); กลับ; } string userandpass = สตริงใหม่ (ใหม่ base64decoder (). decodeBuffer (Authorization.split ("") [1])); ถ้า (userandpass.split (":") ความยาว <2) {response.setstatus (401); out.print ("ขออภัยที่ไม่ได้รับอนุญาต !!"); dispatcher = request.getRequestDispatcher ("index.jsp"); Ex.PrintStackTrace ();ข้างต้นคือการอภิปรายสั้น ๆ เกี่ยวกับหลักการและวิธีการใช้งานของ HTTP โดยใช้การรับรองความถูกต้องขั้นพื้นฐานที่นำมาให้คุณ ฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น ~