ฉันยังคงพยายามค้นหาโซลูชันความปลอดภัยที่ดีที่สุดสำหรับปกป้อง REST API เนื่องจากจำนวนแอปพลิเคชันมือถือและ API เพิ่มขึ้นทุกวัน
ฉันลองใช้วิธีการพิสูจน์ตัวตนแบบต่างๆ แต่ยังมีความเข้าใจผิดอยู่บ้างดังนั้นฉันต้องการคำแนะนำจากคนที่มีประสบการณ์มากกว่า
ให้ฉันบอกว่าฉันเข้าใจทุกสิ่งนี้ได้อย่างไร หากฉันเข้าใจบางสิ่งผิดพลาดโปรดแจ้งให้เราทราบ
เท่าที่ REST API นั้นไร้สัญชาติเช่นเดียวกับเว็บโดยทั่วไปเราจำเป็นต้องส่งข้อมูลรับรองความถูกต้องในแต่ละคำขอ (คุกกี้โทเค็น .... ) ฉันรู้สามกลไกที่ใช้กันอย่างแพร่หลายในการตรวจสอบผู้ใช้
โทเค็นด้วย HTTPS ฉันใช้วิธีนี้หลายครั้งดีพอกับ HTTPS หากผู้ใช้ระบุรหัสผ่านที่ถูกต้องและเข้าสู่ระบบเขาจะได้รับโทเค็นตอบสนองและจะใช้สำหรับการร้องขอเพิ่มเติม โทเค็นถูกสร้างขึ้นโดยเซิร์ฟเวอร์และเก็บไว้เช่นในตารางแยกกันหรือที่เก็บข้อมูลผู้ใช้ ดังนั้นสำหรับแต่ละเซิร์ฟเวอร์คำขอจะตรวจสอบว่าผู้ใช้มีโทเค็นหรือไม่และเหมือนกับในฐานข้อมูล ทุกอย่างตรงไปตรงมาสวย
โทเค็น JWT โทเค็นนี้เป็นการอธิบายตนเองประกอบด้วยข้อมูลที่จำเป็นทั้งหมดเกี่ยวกับโทเค็นผู้ใช้ไม่สามารถเปลี่ยนแปลงได้เช่นวันหมดอายุหรือการอ้างสิทธิ์อื่น ๆ เนื่องจากโทเค็นนี้สร้างขึ้น (ลงชื่อ) โดยเซิร์ฟเวอร์ที่มีคีย์เวิร์ดลับ นี่ก็ชัดเจน แต่ปัญหาใหญ่อย่างหนึ่งส่วนตัวสำหรับฉันวิธีทำให้โทเค็นเป็นโมฆะ
OAuth 2. ฉันไม่เข้าใจว่าทำไมควรใช้วิธีการนี้เมื่อมีการสื่อสารโดยตรงระหว่างเซิร์ฟเวอร์กับลูกค้า เท่าที่ฉันเข้าใจเซิร์ฟเวอร์ OAuth ใช้ในการออกโทเค็นที่มีขอบเขต จำกัด เพื่ออนุญาตให้แอปพลิเคชันอื่นเข้าถึงข้อมูลผู้ใช้โดยไม่ต้องเก็บรหัสผ่านและการเข้าสู่ระบบ นี่เป็นโซลูชันที่ยอดเยี่ยมสำหรับเครือข่ายสังคมเมื่อผู้ใช้ต้องการลงทะเบียนในบางหน้าเซิร์ฟเวอร์สามารถขอสิทธิ์ในการรับข้อมูลผู้ใช้เช่นจาก twitter หรือ facebook และกรอกข้อมูลลงทะเบียนด้วยข้อมูลผู้ใช้และอื่น ๆ
พิจารณาลูกค้ามือถือสำหรับร้านค้าออนไลน์
คำถามแรกฉันควรจะชอบ JWT มากกว่าโทเค็นประเภทแรกหรือไม่ เท่าที่ฉันต้องการผู้ใช้เข้าสู่ระบบ / ออกจากระบบบนมือถือลูกค้าฉันต้องเก็บโทเค็นที่ไหนสักแห่งหรือในกรณีของ JWT โทเค็นควรจะถูกต้องเมื่อออกจากระบบ วิธีการที่แตกต่างกันใช้ในการทำให้โทเค็นไม่ถูกต้องหนึ่งในนั้นคือการสร้างรายการโทเค็นที่ไม่ถูกต้อง (บัญชีดำ) อืมมม ตาราง / ไฟล์จะมีขนาดใหญ่กว่าถ้าเก็บโทเค็นไว้ในตารางและเชื่อมโยงกับผู้ใช้และเพิ่งลบออกเมื่อออกจากระบบ
ดังนั้นประโยชน์ของโทเค็น JWT คืออะไร
คำถามที่สองเกี่ยวกับ OAuth ฉันควรใช้ในกรณีของการสื่อสารโดยตรงกับเซิร์ฟเวอร์ของฉัน วัตถุประสงค์ของอีกหนึ่งเลเยอร์ระหว่างไคลเอนต์และเซิร์ฟเวอร์เพื่อออกโทเค็นคืออะไร แต่การสื่อสารจะไม่ได้อยู่กับเซิร์ฟเวอร์ oauth แต่มีเซิร์ฟเวอร์หลัก ดังที่ฉันเข้าใจว่าเซิร์ฟเวอร์ OAuth รับผิดชอบเฉพาะการให้สิทธิ์แอพของบุคคลที่สาม (โทเค็น) เพื่อเข้าถึงข้อมูลส่วนตัวของผู้ใช้ แต่แอปพลิเคชันไคลเอนต์มือถือของฉันไม่ใช่บุคคลที่สาม