ฉันสนใจเป็นพิเศษในการที่ผู้ใช้ทำการดำเนินงานที่ได้รับอนุญาต / รับรองความถูกต้องบนเว็บ API
คุกกี้การรับรองความถูกต้องเข้ากันได้กับปรัชญา REST และทำไม
ฉันสนใจเป็นพิเศษในการที่ผู้ใช้ทำการดำเนินงานที่ได้รับอนุญาต / รับรองความถูกต้องบนเว็บ API
คุกกี้การรับรองความถูกต้องเข้ากันได้กับปรัชญา REST และทำไม
คำตอบ:
บริการสงบเหมาะช่วยให้ลูกค้า (ซึ่งอาจไม่อยู่ในเบราว์เซอร์) เพื่อดำเนินการใด ๆ ที่จำเป็นในการร้องขอ ; เนื่องจากสถานะเต็มจำเป็นต้องมีการดำเนินการโดยไคลเอ็นต์ไม่ใช่เซิร์ฟเวอร์ เนื่องจากไคลเอ็นต์มีการควบคุมสถานะอย่างสมบูรณ์จึงสามารถสร้างสถานะได้ด้วยตนเอง (หากถูกต้องตามกฎหมาย) และพูดคุยกับ API เท่านั้นเพื่อ "ทำให้เสร็จ"
การขอคุกกี้สามารถทำได้ยาก สำหรับลูกค้าที่นอกเหนือจากเบราว์เซอร์การจัดการคุกกี้เป็นความไม่สะดวกที่ค่อนข้างใหญ่เมื่อเทียบกับการค้นหาพารามิเตอร์ส่วนหัวคำขอธรรมดาหรือเนื้อหาคำขอ ในทางกลับกันในเบราว์เซอร์การใช้คุกกี้สามารถทำสิ่งต่าง ๆ ได้ง่ายกว่ามาก
ดังนั้น API แรกอาจจะดูในAuthorization
ส่วนหัวสำหรับการตรวจสอบข้อมูลที่จำเป็นเนื่องจากว่าอาจเป็นสถานที่ที่ลูกค้าที่ไม่ใช่เบราว์เซอร์จะชอบที่จะนำมัน แต่เพื่อลดความซับซ้อนและปรับปรุงลูกค้าเบราว์เซอร์ที่ใช้ก็อาจจะยังตรวจสอบเซสชันคุกกี้ สำหรับการล็อกอินฝั่งเซิร์ฟเวอร์ แต่เฉพาะในกรณีที่Authorization
ส่วนหัวปกติหายไป
อีกตัวอย่างหนึ่งอาจเป็นคำขอที่ซับซ้อนที่โดยปกติต้องใช้พารามิเตอร์จำนวนมาก ไคลเอ็นต์ที่ไม่มีการโต้ตอบจะไม่มีปัญหาในการติดขัดข้อมูลทั้งหมดเป็นคำขอเดียว แต่อินเทอร์เฟซที่ใช้แบบฟอร์ม HTML อาจต้องการแบ่งคำขอออกเป็นหลาย ๆ หน้า ด้วยตัวเลือกที่ไม่สามารถใช้ได้ตามการเลือกก่อนหน้า เพจระดับกลางทั้งหมดสามารถเก็บค่าไว้ในคุกกี้ฝั่งไคลเอ็นต์ดังนั้นเฉพาะหน้าสุดท้ายที่ผู้ใช้ส่งการร้องขอเท่านั้นจึงมีผลข้างเคียงของเซิร์ฟเวอร์เลย API สามารถค้นหาแอตทริบิวต์ที่จำเป็นในเนื้อหาคำขอและย้อนกลับไปดูคุกกี้หากไม่มีพารามิเตอร์ที่จำเป็น
แก้ไข:ใน RE ถึงความคิดเห็นของ @ Konrad ด้านล่าง:
การเปรียบเทียบโทเค็นนั้นทำได้ยากกว่าโดยเฉพาะอย่างยิ่งเพราะคุณไม่สามารถทำให้โทเค็นเป็นโมฆะได้ง่าย ๆ
เอ่อ ... คุณกำลังตรวจสอบคุกกี้ที่ฝั่งเซิร์ฟเวอร์ใช่ไหม เพียงเพราะคุณบอกให้เบราว์เซอร์ทิ้งคุกกี้หลังจากผ่านไป 24 ชั่วโมงไม่ได้หมายความว่าจะเป็นเช่นนั้น คุกกี้นั้นสามารถบันทึกได้โดยผู้ใช้งานด้านเทคนิคสูงและสามารถนำกลับมาใช้ใหม่ได้หลังจากที่ "หมดอายุ" แล้ว
หากคุณไม่ต้องการจัดเก็บข้อมูลเซสชันทางฝั่งเซิร์ฟเวอร์คุณควรเก็บไว้ในโทเค็น (คุกกี้หรืออย่างอื่น) โทเค็นรับรองความถูกต้องในตัวเองบางครั้งเรียกว่าMacaroon วิธีการนี้ถูกส่งผ่านระหว่างไคลเอนต์และเซิร์ฟเวอร์ (ไม่ว่าจะเป็นคุกกี้ในฐานะส่วนหัวพิเศษหรือในเอนทิตีคำขอ) นั้นเป็นอิสระจากกลไกการพิสูจน์ตัวตนโดยสิ้นเชิง
HttpClient
ใน. NET คุณสามารถใช้คุกกี้ได้โดยไม่มีปัญหาใด ๆ และคุณไม่จำเป็นต้องคิดถึงมันจริงๆ การเปรียบเทียบโทเค็นนั้นทำได้ยากกว่าโดยเฉพาะอย่างยิ่งเพราะคุณไม่สามารถทำให้โทเค็นเป็นโมฆะได้ง่าย ๆ
curl
หรือwget
การจัดการคุกกี้นั้นค่อนข้างไม่สะดวกและคุณต้องคิดถึงพวกเขาเป็นอย่างมาก ฉันตอบไปที่จุดอื่นของคุณโดยแก้ไขคำตอบของฉัน
ใช่และไม่ใช่ - ขึ้นอยู่กับว่าคุณใช้มันอย่างไร
คุกกี้หากใช้เพื่อรักษาสถานะไคลเอนต์ที่ลูกค้าสำหรับลูกค้าของลูกค้าและโดยลูกค้าแล้วพวกเขาจะสงบ
หากคุณกำลังเก็บสถานะเซิร์ฟเวอร์ไว้ในคุกกี้โดยทั่วไปแล้วคุณเพียงแค่เลื่อนการโหลดไปยังไคลเอนต์ - ซึ่งไม่ได้พักผ่อน
ดังนั้นมีตัวอย่างอะไรบ้าง
สงบ:
ไม่พักผ่อน
ความสงบนั้นมาจากการไร้สัญชาติ - ของเซิร์ฟเวอร์ ลูกค้าสามารถรักษาสถานะแอปพลิเคชันและส่งไปยังเซิร์ฟเวอร์เพื่อบอกว่าพวกเขาอยู่ที่ไหนเพื่อให้เซิร์ฟเวอร์สามารถตัดสินใจว่าจะไปจากที่นั่น โดยทั่วไปเซสชัน / รัฐจำเป็นต้องมีข้อมูลประวัติและขึ้นอยู่กับคำขอที่ผ่านมาดังนั้นเพื่อพูดแอปพลิเคชันที่เงียบสงบไม่ได้เป็นอย่างดี
หนึ่งสามารถใช้คุกกี้ ส่วนที่เหลือช่วยให้พวกเขา
REST ต้องการให้มีการจัดเก็บข้อมูลเซสชันใด ๆ ในฝั่งไคลเอ็นต์ แต่เมื่อมันมาถึงการรับรองความถูกต้องข้อมูลบางอย่างจะต้องอยู่ด้านเซิร์ฟเวอร์เพื่อเหตุผลด้านความปลอดภัย
จากหนึ่งในโพสต์บล็อกของฉันมีข้อตกลงทั่วไปที่ข้อมูลการตรวจสอบความถูกต้องถือว่าอยู่นอกขอบเขตที่เกี่ยวข้องกับ REST ดังนั้นจึงเป็นเรื่องปกติที่เซิร์ฟเวอร์จะเก็บข้อมูลเซสชันนี้ไว้ข้างๆ