รหัสสถานะ HTTP 401 หรือ 403? ความแตกต่างของข้อผิดพลาดการรับรองตัวตนและการอนุญาต
401 Unauthorized หมายถึงไคลเอนต์ไม่ได้รับการรับรองตัวตน ต้องใช้ข้อมูลประจำตัวที่ถูกต้อง 403 Forbidden หมายถึงไคลเอนต์ได้รับการรับรองตัวตนแล้ว แต่ไม่มีสิทธิ์ที่จำเป็นในการเข้าถึงทรัพยากร
ทุกครั้งที่คุณโหลดเว็บเพจ ชำระเงิน หรือเข้าสู่แอป จะมีบทสนทนาที่มองไม่เห็นเกิดขึ้นระหว่างอุปกรณ์ของคุณกับเซิร์ฟเวอร์ มันเหมือนกับการส่งข้อความและรอคำตอบ—บางครั้งมันก็เป็นเครื่องหมายยกนิ้ว บางครั้งก็เป็นคำบอก 'ลองอีกครั้ง' และบางครั้ง มันก็คือ 'ไม่' อย่างตรงไปตรงมา การตอบสนองเหล่านี้ที่เรียกว่า HTTP status codes คือตัวช่วยเหลือที่ไม่มีใครรู้ของอินเตอร์เน็ต คอยแนะแนวการสื่อสารและทำให้ทุกอย่างทำงานได้อย่างราบรื่น—หรืออย่างน้อยก็จะบอกให้คุณรู้เมื่อมันไม่ราบรื่น
HTTP status codes คืออะไร
HTTP status codes เปรียบเสมือนสัญญาณในบทสนทนาระหว่างไคลเอนต์ (เช่น เบราว์เซอร์หรือแอปของคุณ) และเซิร์ฟเวอ ร์ พวกมันให้ข้อมูลอัปเดตอย่างรวดเร็วและชัดเจนเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณทำการขอ—ไม่ว่าจะทำงานราบรื่น มีบางอย่างผิดพลาด หรือมีการดำเนินการเพิ่มเติมที่จำเป็น ลองคิดดูว่าเหมือนการเยี่ยมชมเบเกอรี่ที่บริหารงานอย่างดี:
200: ทุกอย่างสมบูรณ์แบบ
คุณถามหาครัวซองต์ คนทำขนมยิ้มให้ ยื่นให้แล้วกล่าวว่า “นี่คุณได้เลย!” นั่นคือ HTTP 200 OK—คำขอสำเร็จ และทุกอย่างทำงานตามที่คาดไว้
รหัสสถานะ HTTP 200 OK เป็นหนึ่งในรหัสที่ใช้กันทั่วไปมากที่สุด แสดงว่าคำขอจากไคลเอนต์ได้รับแล้ว เข้าใจ และประมวลผลสำเร็จโดยเซิร์ฟเวอร์
301: เราได้ย้ายที่อยู่
คุณมาถึงที่เบเกอรี่ที่ชื่นชอบ แต่มีป้ายบอกว่า “เราย้ายไปที่เลขที่ 123 ถนนใหม่” นี่คือ 301 Moved Permanently เซิร์ฟเวอร์บอกไคลเอนต์ของคุณให้ไปที่ที่อยู่ใหม่โดยอัตโนมัติ
รหัสสถานะ HTTP 301 Moved Permanently หมายถึงว่าทรัพยากรที่ขอได้ย้ายไปยัง URL ใหม่อย่างถาวร รหัสสถานะนี้แจ้งให้ไคลเอนต์ (เช่น เบราว์เซอร์หรือไคลเอนต์ API) อัปเดตบันทึกและใช้ URL ใหม่สำหรับคำขอในอนาคต
404: ขอโทษ ไม่มีที่นี่
คุณถามหาคุกกี้ช็อกโกแลตแบบเป็นชิ้น และคนทำขนมกล่าวว่า “เราไม่ทำอันนั้นที่นี่” นั่นคือ 404 Not Found—ทรัพยากรที่คุณกำลังมองหาไม่มีอยู่บนเซิร์ฟเวอร์
รหัสสถานะ HTTP 404 Not Found หมายถึงว่าเซิร์ฟเวอร์ไม่พบทรัพยากรที่ขอ การตอบสนองนี้หมา ยความว่าคำขอของไคลเอนต์ถูกต้อง แต่เซิร์ฟเวอร์ไม่สามารถค้นหาทรัพยากรที่ถูกขอได้
401: คุณคือใคร?
คุณพยายามเข้าห้องรับรอง VIP แต่เจ้าหน้าที่รักษาความปลอดภัยหยุดคุณและบอกว่า “คุณต้องแสดงบัตรสมาชิกของคุณ” นั่นคือ 401 Unauthorized—ต้องการการรับรองตัวตนก่อนเข้าถึงทรัพยากร
รหัสสถานะ HTTP 401 Unauthorized หมายถึงว่าคำขอของไคลเอนต์ยังไม่ได้รับการใช้เนื่องจากขาดข้อมูลประจำตัวที่ถูกต้อง เซิร์ฟเวอร์ต้องการให้ไคลเอนต์รับรองตัวตนเพื่อเข้าถึงทรัพยากรที่ขอ
403: ไม่ใช่สำหรับคุณ
คุณแสดงบัตรสมาชิกของคุณ แต่เจ้าหน้าที่รักษาความปลอดภัยกล่าวว่า “เฉพาะสมา ชิกแพลตินัมเท่านั้นที่สามารถเข้าได้” นั่นคือ 403 Forbidden—คุณได้รับการรับรองตัวตนแล้ว แต่ไม่มีสิทธิ์ที่จำเป็นในการเข้าถึงทรัพยากรนั้น
รหัสสถานะ HTTP 403 Forbidden หมายถึงว่าเซิร์ฟเวอร์เข้าใจคำขอของไคลเอนต์ แต่ปฏิเสธที่จะรองรับคำขอเนื่องจากไคลเอนต์ไม่มีสิทธิ์ที่จำเป็น นี่แตกต่างจากสถานะ 401 Unauthorized เพราะไคลเอนต์ได้รับการรับรองตัวตนแล้ว (หรือคำขอไม่ต้องการการรับรองตัวตน) แต่การเข้าถึงทรัพยากรถูกปฏิเสธอย่างชัดเจน
500: เตาอบมีไฟ
คุณทำการสั่งซื้อตอนนี้ แต่จู่ๆ ควันเริ่มไหลออกมาจากครัว คนทำขนมบอกว่า “เราไม่สามารถรองรับคำสั่งของคุณได้; มีปัญหาภายในเกิดขึ้น” นั่นคือ 500 Internal Server Error—เซิร์ฟเวอร์พบปัญหาที่ไม่คาดคิด
รหัสสถานะ HTTP 500 Internal Server Error หมายถึงว่าเซิร์ฟเวอร์พบเงื่อนไขที่ไม่คาดคิดซึ่งทำให้ไม่สามารถรับรองคำขอได้ มันเป็นการตอบสนองข้อผิดพลาดทั่วไปและไม่ให้อธิบายรายละเอียดเฉพาะเกี่ยวกับสิ่งที่ผิดพลาด
503: ไม่มีชั่วคราว
คุณเยี่ยมชมเบเกอรี่ แต่มีป้ายว่า “ปิดสำหรับการบำรุงรักษา” เบเกอรี่จะเปิดใหม่ในภายหลัง นั่นคือ 503 Service Unavailable—เซิร์ฟเวอร์ไม่สามารถรองรับคำขอของคุณชั่วคราว มักเนื่องจากการโอเวอร์โหลดหรือการบำรุงรักษา
รหัสสถานะ HTTP 503 Service Unavailable หมายถึงว่าเซิร์ฟเวอร์ไม่สามารถรองรับคำขอชั่วคราวได้ นี่อาจเกิดจากโอเวอร์โหลดเซิร์ฟเวอร์ การบำรุงรักษา หรือเงื่อนไขชั่วคราวอื่นๆ ไม่เหมือนกับ 500 Internal Server Error 503 บ่งบอกว่าสถานการณ์คาดว่าจะ ถูกแก้ไขเร็วๆ นี้
รหัสสถานะ HTTP เป็นกุญแจสำคัญสำหรับการสื่อสารที่มีประสิทธิภาพระหว่างไคลเอนต์และเซิร์ฟเวอร์ พวกเขาบอกไคลเอนต์อย่างรวดเร็วว่าคำขอสำเร็จ ล้มเหลว หรือจำเป็นต้องดำเนินการเพิ่มเติม สำหรับนักพัฒนาและผู้เชี่ยวชาญด้านไอที การเข้าใจรหัสเหล่านี้ช่วยวิเคราะห์ปัญหา ออกแบบการจัดการข้อผิดพลาดที่ดีขึ้น และปรับปรุงประสบการณ์ผู้ใช้โดยรวม
คิดถึงพวกมันเหมือนสัญญาณที่มืออาชีพและเป็นมาตรฐานในบทสนทนาของอินเตอร์เน็ต
ในบทความนี้ ฉันต้องการมุ่งเน้นไปที่ข้อผิดพลาด 401 และ 403 เนื่องจากพวกมันเกี่ยวข้องอย่างใกล้ชิดกับการรับรองตัวตน (AuthN) และการอนุญาต (AuthZ)
เมื่อใดควรใช้ 401 Unauthorized?
รหัสสถานะ HTTP 401 Unauthorized ใช้เมื่อคำขอของไคลเอนต์ต้องมีการรับรองตัวตน แต่ไม่มี สุทธิหรือไม่ประสบความสำเร็จ มันบอกไคลเอนต์ว่าจำเป็นต้องรับรองตัวตนเพื่เข้าถึงทรัพยากรที่ขอได้ ความสัมพันธ์ระหว่างการรับรองตัวตนและรหัสสถานะ 401 Unauthorized อยู่ในบทบาทของการรับรองตัวตนในการกำหนดว่าคำขอสามารถดำเนินการต่อได้หรือไม่
401 unauthorized ต้องมีหัว WWW-Authenticate รวมถึงรายละเอียดเกี่ยวกับวิธีการรับรองตัวตน
ดังนั้น อะไรคือลักษณะการใช้งานทั่วไปของการใช้ 401 Unauthorized?
-
การรับรองตัวตนขาดหาย
คำขอไม่มีข้อมูลประจำตัวการรับรองตัวตนที่ต้องการ ตัวอย่างเช่น: มีคำขอไปยังจุดสิ้นสุด API ที่ป้องกันโดยไม่มีหัว Authorization
-
ข้อมูลประจำตัวการรับรองตัวตนไม่ถูกต้อง
ไคลเอนต์ให้ข้อมูลประจำตัว แต่ผิดหรือไม่ตรงกับที่เซิร์ฟเวอร์ต้องการ ตัวอย่างเช่น ผู้ใช้ส่งคีย์ API ที่ผิดหรือโทเค็นที่ผิดรูป
-
โทเค็นการรับรองตัวตนหมดอายุ
โทเค็นการรับรองตัวตนมีค่า แต่หมดอายุ จำเป็นต้องให้ไคลเอนต์รับรองตัวตนใหม่ ตัวอย่าง: โทเค็น JWT กับวันที่หมดอายุที่ผ่านไป (claim exp)
-
หัว authorization ขาดหายหรือผิดรูป
หัว authorization จำเป็นแต่ไม่ได้ให้มาหรือมีรูปแบบไม่ถูกต้อง
-
โปรแกรมรับรองตัวตนที่ไม่ได้รับการสนับสนุน
เซิร์ฟเวอร์ไม่สนับสนุนวิธีการรับรองตัวตนที่ไคลเอนต์ให้ ตัวอย่างเช่น: ไคลเอนต์ส่งหัวการรับรองแบบ Basic แต่เซิร์ฟเวอร์สนับสนุนเฉพาะโทเค็น Bearer
-
การยกเลิกเซสชันหรือโทเค็นไม่ถูกต้อง
เซสชันของผู้ใช้ได้รับการยกเลิก หรือโทเค็นของพวกเขาถูกยกเลิก ตัวอย่างเช่น: ผู้ใช้ออกจากระบบ แต่โทเค็นเดียวกันใช้เพื่อเข้าถึงทรัพยากรที่ป้องกัน
ตัวอย่างการตอบสนอง
เมื่อใดควรใช้ 403 Forbidden?
รหัสสถานะ HTTP 403 Forbidden หมายถึงว่าเซิร์ฟเวอร์เข้าใจคำขอและตัวตนของไคลเอนต์ (หากรับรองตัวตนแล้ว) แต่ปฏิเสธการเข้าถึงเนื่องจากสิทธิ์ไม่เพียงพอ มันแสดงอย่างชัดเจนว่า “คุณไม่ได้รับอนุญาตให้ทำสิ่งนี้” ซึ่งแน่ใจว่าจะมีข้อจำกัดการเข้าถึงที่ชัดเจนและเสริมสร้างนโยบายความปลอดภัย
ความแตกต่างระหว่าง 401 Unauthorized และ 403 Forbidden อยู่ในบทบาทของพวกเขาภายในบริบทของการรับรองตัวตนและการอนุญาต
การอนุญาตเป็นกลไกที่แยกต่างหากจาก authentication ในขณะที่การรับรองตัวตนระบุว่าคุณคือใคร การอนุมัติกำหนดว่าคุณสามารถเข้าถึงทรัพยากรใดและสามารถทำฟอร์มีต่าง ๆ ใด
เพื่อดูความแตกต่างที่ละเอียดเกี่ยวกับ authN และ authZ ดูบทความเหล่านี้
ดังนั้น อะไรคือลักษณะการใช้งานทั่วไปของการใช้ 403 Forbidden?
-
ได้รับการรับรองตัวตนแต่ขาดสิทธิ์
ไคลเอนต์เข้าสู่ระบบหรือได้รับการรับรองตัวตนแต่ไม่มีสิทธิ์หรือบทบาทที่ต้องการ ตัวอย่าง: ผู้ใช้ที่มีบทบาท “viewer” พยายามลบไฟล์ ซึ่งต้องการสิทธิ์ “editor”
-
การจำกัดการเข้าถึงทรัพยากร
การเข้าถึงทรัพยากรถูกจำกัดให้เฉพาะผู้ใช้หรือกลุ่มบางกลุ่ม ตัวอย่างเช่น: เอกสารที่แบ่งปันเฉพาะกับผู้ใช้บางคนถูกเข้าถึงโดนคนที่ไม่อยู่ในรายการสิทธิ์เข้าถึง
-
บล็อค IP หรือภูมิภาค
ที่อยู่ IP ของไคลเอนต์หรือที่ตั้งภูมิศาสตร์ถูกบล็อคโดยเซิร์ฟเวอร์ ตัวอย่าง: ผู้ใช้จากภูมิภาคที่ถูกจำกัดพยายามเข้าถึงบริการที่ดำเนินการเฉพาะในบางประเทศ
-
การกระทำที่ถูกบล็อคโดยนโยบาย
ไคลเอนต์พยายามทำสิ่งที่ห้ามโดยนโยบายหรือ กฎของเซิร์ฟเวอร์ ตัวอย่าง: ผู้ใช้พยายามปรับเปลี่ยนทรัพยากรที่ถูกทำเครื่องหมายว่า “อ่านอย่างเดียว”
-
ทรัพยากรคงที่ถูกบล็อค
เซิร์ฟเวอร์ปฏิเสธการเข้าถึงไฟล์หรือไดเรกทอรีคงที่บางอย่างเพื่อเหตุผลด้านความปลอดภัย
ตัวอย่าง: ผู้ใช้พยายามเข้าถึง .htaccess หรือไฟล์การตั้งค่าเซิร์ฟเวอร์
-
บัญชีถูกระงับหรือปิดการใช้งาน
บัญชีของไคลเอนต์ถูกปิดหรือถูกบล็อคเนื่องจากการละเมิดหรือการไม่ใช้งาน ตัวอย่าง: ผู้ใช้ที่มีบัญชีที่ถูกระงับพยายามเข้าสู่ระบบหรือเข้าถึงทรัพยากร
-
การกระทำที่ต้องการสิทธิ์ที่ยกระดับ
การกระทำที่ขอต้องการสิทธิพิเศษพิเศษ (เช่น admin หรือ superuser) ตัวอย่าง: ผู้ใช้ทั่วไปพยายามเข้าถึงจุดสิ้นสุดที่มีเฉพาะ admin
ตัวอย่างการตอบสนอง:
ฉันจะแก้ไขข้อผิดพลาด 401 unauthorized ได้อย่างไร
ข้อผิดพลาด 401 โดยทั่วไปหมายถึงการรับรองตัวตนจำเป็นต้องและล้มเหลว
ตรวจสอบข้อมูลประจำตัว
ตรวจสอบให้แน่ใจว่าหัว Authorization มีอยู่และจัดรูปแบบอย่างถูกต้อง และตรวจสอบข้อมูลประจำตัว (คีย์ API, โทเค็น หรือรหัสผ่าน) มีความถูกต้องและไม่หมดอายุ การป้อนชื่อผู้ใช้หรือรหัสผ่านที่ผิดเป็นหนึ่งในสาเหตุที่เกิดข้อผิดพลาด 401 บ่อยที่สุด
ตรวจสอบวิธีการรับรองตัวตน
เซิร์ฟเวอร์อาจคา ดหวังวิธีการรับรองตัวตนที่แตกต่างไปจากที่ให้ นี่อาจเกิดขึ้นถ้าไคลเอนต์และเซิร์ฟเวอร์ไม่สอดคล้องในโปรโตคอลการรับรองตัวตน ใช้วิธีการที่ถูกต้อง (เช่น Basic, Bearer, API Key) ตามที่ระบุโดยเซิร์ฟเวอร์และตรวจสอบไวยากรณ์ที่ถูกต้องในหัว
ตรวจสอบการตอบสนองของเซิร์ฟเวอร์
ตรวจสอบเนื้อหาการตอบสนองเพื่อดูรายละเอียดข้อผิดพลาดและดูที่หัว WWW-Authenticate สำหรับคำแนะนำการรับรองตัวตน
ยืนยันคำขอ
ยืนยันจุดสิ้นสุด, พารามิเตอร์คำถาม, และโฮสต์ว่ามีความถูกต้องและตรวจสอบว่าทรัพยากรที่คุณเข้าถึงต้องการการรับรองตัวตน