Everyauth vs Passport.js?


122

EveryauthและPassport.jsดูเหมือนจะมีชุดคุณลักษณะที่คล้ายกันมาก อะไรคือการเปรียบเทียบเชิงบวกและเชิงลบระหว่างสองสิ่งที่ทำให้ฉันอยากใช้อีกแบบหนึ่ง


อีกทางเลือกหนึ่งคือการใช้Grantซึ่งก็ต่อเมื่อคุณกำลังมองหามิดเดิลแวร์ OAuth รองรับผู้ให้บริการหลายร้อยรายและกำหนดค่าผ่านโครงสร้างข้อมูล JSON ที่ตรงไปตรงมา
simo

คำตอบ:


191

ตีระฆังด้วยสองเซ็นต์ของฉันเป็นนักพัฒนาของหนังสือเดินทาง

ก่อนที่จะพัฒนา Passport ฉันได้ประเมินทุกครั้งและพิจารณาแล้วว่าไม่ตรงตามข้อกำหนดของฉัน ดังนั้นฉันจึงตั้งค่าเกี่ยวกับการใช้โซลูชันอื่นซึ่งจะ ประเด็นสำคัญที่ฉันต้องการกล่าวคือ:

Idiomatic Node.js

everyauth ใช้คำสัญญาอย่างกว้างขวางแทนที่จะใช้แนวทางของ Node ในการใช้การโทรกลับและการปิด คำสัญญาเป็นอีกทางเลือกหนึ่งในการเขียนโปรแกรม async แม้ว่าจะมีประโยชน์ในบางสถานการณ์ระดับสูง แต่ฉันไม่สะดวกใจที่ไลบรารีการตรวจสอบสิทธิ์บังคับให้ใช้ตัวเลือกนี้กับแอปพลิเคชันของฉัน

นอกจากนี้ฉันพบว่าการใช้การโทรกลับและการปิดอย่างเหมาะสมจะให้รหัสที่กระชับและได้รับการออกแบบมาอย่างดี (รูปแบบที่ใช้งานได้เกือบ) พลังส่วนใหญ่ของ Node นั้นมาจากข้อเท็จจริงนี้และ Passport ก็เป็นไปตามความเหมาะสม

modular

หนังสือเดินทางใช้รูปแบบการออกแบบกลยุทธ์เพื่อกำหนดการแยกข้อกังวลที่ชัดเจนระหว่างโมดูลหลักและกลไกการตรวจสอบสิทธิ์ต่างๆ สิ่งนี้มีประโยชน์หลายประการรวมถึงขนาดโค้ดโดยรวมที่เล็กลงและอินเทอร์เฟซที่กำหนดไว้อย่างดีและทดสอบได้

สำหรับภาพประกอบพื้นฐานการเปรียบเทียบความแตกต่างระหว่างการเรียกใช้และ$ npm install passport $ npm install everyauthหนังสือเดินทางช่วยให้คุณสร้างแอปพลิเคชันของคุณโดยใช้เฉพาะการอ้างอิงที่คุณต้องการเท่านั้น

สถาปัตยกรรมแบบแยกส่วนนี้ได้พิสูจน์แล้วว่าสามารถปรับเปลี่ยนได้ช่วยอำนวยความสะดวกให้กับชุมชนที่ใช้การสนับสนุนสำหรับกลไกการตรวจสอบสิทธิ์ที่หลากหลายรวมถึง OpenID, OAuth, BrowserID, SAML และอื่น ๆ

คล่องตัว

หนังสือเดินทางเป็นเพียงมิดเดิลแวร์โดยใช้fn(req, res, next)อนุสัญญาที่ Connect and Express กำหนดขึ้น

ซึ่งหมายความว่าไม่มีเรื่องน่าประหลาดใจใดๆ เนื่องจากคุณกำหนดตำแหน่งที่คุณต้องการเส้นทางและเวลาที่คุณต้องการใช้การตรวจสอบสิทธิ์ นอกจากนี้ยังไม่มีการอ้างอิงในกรอบงานเฉพาะ ผู้คนประสบความสำเร็จในการใช้ Passport กับเฟรมเวิร์กอื่น ๆ เช่นFlatiron

ในทางตรงกันข้ามโมดูลใด ๆ ใน everyauth สามารถแทรกเส้นทางลงในแอปพลิเคชันของคุณได้ สิ่งนี้สามารถทำให้การดีบักทำได้ยากเนื่องจากไม่ชัดเจนว่าจะส่งเส้นทางอย่างไรและนำไปสู่การเชื่อมต่อที่แน่นหนากับเฟรมเวิร์กเฉพาะ

หนังสือเดินทางยังมีข้อผิดพลาดในลักษณะที่เป็นแบบแผนโดยสิ้นเชิงซึ่งเป็นสิ่งที่อยู่ถัดไปจากมิดเดิลแวร์จัดการข้อผิดพลาดตามที่กำหนดโดย Express

ในทางตรงกันข้าม everyauth มีอนุสัญญาของตัวเองซึ่งไม่พอดีกับพื้นที่ของปัญหาทำให้เกิดปัญหาที่เปิดมายาวนานเช่น# 36

การตรวจสอบสิทธิ์ API

ความสำเร็จสูงสุดของไลบรารีการตรวจสอบความถูกต้องคือความสามารถในการจัดการการตรวจสอบสิทธิ์ API ได้อย่างสวยงามเช่นเดียวกับการลงชื่อบนเว็บ

ฉันจะไม่อธิบายรายละเอียดในประเด็นนี้มากนัก แต่ผมขอแนะนำให้คนที่จะมองเข้าไปในโครงการพี่น้องหนังสือเดินทางของOAuthorizeและOAuth2orize เมื่อใช้โปรเจ็กต์เหล่านี้คุณสามารถใช้การตรวจสอบสิทธิ์แบบ "เต็มสแต็ก" สำหรับทั้งเว็บแอปที่ใช้ HTML / เซสชันและไคลเอ็นต์ API

น่าเชื่อถือ

สุดท้ายการพิสูจน์ตัวตนเป็นองค์ประกอบที่สำคัญของแอปพลิเคชันและเป็นสิ่งที่คุณต้องการวางใจได้อย่างเต็มที่ everyauth มีรายการปัญหามากมายซึ่งหลายประเด็นยังคงเปิดอยู่และเกิดขึ้นอีกครั้งเมื่อเวลาผ่านไป ในความคิดของฉันนี่เป็นเพราะความครอบคลุมของการทดสอบหน่วยต่ำซึ่งแสดงให้เห็นว่าอินเทอร์เฟซภายในในทุก ๆ ส่วนไม่ได้กำหนดไว้อย่างเหมาะสม

ในทางตรงกันข้ามอินเทอร์เฟซและกลยุทธ์ของ Passport ได้รับการกำหนดไว้อย่างดีและครอบคลุมโดยการทดสอบหน่วย ปัญหาที่ยื่นต่อ Passport ส่วนใหญ่มักจะเป็นคำขอคุณลักษณะเล็กน้อยมากกว่าข้อบกพร่องเกี่ยวกับการตรวจสอบสิทธิ์

แม้จะเป็นโครงการที่อายุน้อยกว่า แต่คุณภาพระดับนี้ก็แนะนำวิธีแก้ปัญหาที่เป็นผู้ใหญ่มากขึ้นซึ่งง่ายต่อการดูแลรักษาและไว้วางใจในอนาคต


9
@EhevuTov> เลือกคำตอบนี้มันสมบูรณ์กว่าของฉันมากและฉันเห็นด้วย 100% กับข้อสังเกตของเขา
พอล

1
@Jared Hanson: คุณมีตัวอย่างวิธีการใช้หนังสือเดินทางกับ RESTfull auth หรือไม่?
Naor

5
ฉันไม่เห็นว่าสัญญาเปลี่ยนประโยชน์ที่อ้างถึงของสไตล์การโทรกลับของวานิลลาได้อย่างไร คุณกำลังทำสิ่งเดียวกันโดยมีโค้ดน้อยกว่าในสถานการณ์ที่ชุดเหตุการณ์เชิงเส้นทริกเกอร์การเรียกกลับเพิ่มเติม
Erik Reppen

1
เห็นด้วยกับ @ErikReppen ว่าสัญญาไม่เกี่ยวข้องในการเปรียบเทียบนี้
vicneanschi

แดกดัน แต่ตอนนี้หนังสือเดินทางมีปัญหามากกว่านั้น: github.com/jaredhanson/passport/issues (273 เทียบกับ 148 สำหรับ everyauth)
Anton Bessonov

19

หนังสือเดินทาง

  • โมดูลาร์และโปร่งใส
  • เอกสารที่ดี
  • การมีส่วนร่วมของชุมชน (เนื่องจากเป็นโมดูล)
  • ทำงานได้กับทุกคนและสุนัขของพวกเขา (อีกครั้งเนื่องจากเป็นแบบแยกส่วน)

Everyauth

  • ประวัติการพัฒนาที่ยาวนานเป็นผู้ใหญ่
  • ไม่ได้รับการบำรุงรักษาอีกต่อไป
  • เอกสารที่ดี
  • ทำงานร่วมกับบริการที่หลากหลาย

1
Everyauth ไม่ได้รับการบำรุงรักษาอีกต่อไป
YasharF

1
@YasharF ขอบคุณที่แจ้งให้เราทราบ คำตอบได้รับการอัปเดตแล้ว
Waylon Flinn

โปรดทราบว่าหนังสือเดินทางดูเหมือนจะไม่ได้รับการดูแลอีกต่อไป การคอมมิตฟังก์ชันล่าสุดถูกสร้างขึ้นเมื่อ 2 ปีที่แล้วและมีปัญหาที่เปิดอยู่ 300 ฉบับ
Uri

16

เพิ่งเปลี่ยนจาก everyauth เป็นพาสปอร์ตเสร็จ สาเหตุมีดังต่อไปนี้

  1. ทุกคนไม่มีความเสถียรเพียงพอ ฟางเส้นสุดท้ายคือเมื่อสัปดาห์ที่แล้วฉันถูกกัดด้วยปัญหาลึกลับที่การรับรองความถูกต้องของ Facebook จะทำงานบน local.host และในสภาพแวดล้อมการผลิต แต่ไม่ใช่ในสภาพแวดล้อมการทดสอบของฉันบน heroku แม้ว่าจะมีรหัสและฐานข้อมูลที่เหมือนกันและอินสแตนซ์แอป heroku ใหม่ ในตอนนั้นฉันไม่มีทฤษฎีเกี่ยวกับวิธีการแยกปัญหาดังนั้นการลบ everyauth จึงเป็นขั้นตอนต่อไปที่มีเหตุผล
  2. วิธีที่ให้การสนับสนุนสำหรับการรับรองความถูกต้องมาตรฐานโดยใช้ข้อมูลรับรองชื่อผู้ใช้ / รหัสผ่านนั้นไม่สามารถรวมเข้ากับวิธีการของเว็บแอปหน้าเดียวได้อย่างง่ายดาย
  3. ฉันไม่สามารถให้ทุกคนทำงานกับบัญชี Google ได้
  4. การพัฒนาที่ใช้งานอยู่ของ everyauth ดูเหมือนจะลดลง

พอร์ตนั้นไม่เจ็บปวดอย่างน่าประหลาดใจโดยใช้เวลาเพียงไม่กี่ชั่วโมงรวมถึงการทดสอบด้วยตนเอง

เห็นได้ชัดว่าฉันแนะนำให้ไปทำหนังสือเดินทาง


ขอบคุณสำหรับเรื่องจริงแม้ว่าฟางเส้นสุดท้ายจะไม่ชัดเจน
Andrew_1510

4

ฉันลองใช้ Everyauth ก่อนและตั้งแต่นั้นมาก็ไปที่ Passport มันทำให้ฉันรู้สึกยืดหยุ่นมากขึ้นโดยเฉพาะ ถ้า (เช่น) ฉันต้องการตรรกะที่แตกต่างกันสำหรับผู้ให้บริการที่แตกต่างกัน นอกจากนี้ยังทำให้ (imo) กำหนดค่ากลยุทธ์การตรวจสอบสิทธิ์แบบกำหนดเองได้ง่ายขึ้น ในทางกลับกันมันไม่มีตัวช่วยในการดูหากสิ่งเหล่านั้นสำคัญสำหรับคุณ


ฉันสังเกตเห็นว่า Passport.js บอกว่ามันแยกความกังวลและฉันสงสัยว่า everyauth ถูกสร้างขึ้นในลักษณะเดียวกันหรือไม่
EhevuTov

2

ฉันเคยใช้ Everyauth โดยเฉพาะ mongoose-auth ฉันพบว่ามันยากที่จะแยกไฟล์อย่างถูกต้องโดยไม่ต้องถอดโมดูล everyauth ออก หนังสือเดินทางในความคิดของฉันเป็นวิธีที่สะอาดกว่าในการสร้างการเข้าสู่ระบบ มีข้อเขียนที่ฉันพบว่ามีประโยชน์มากhttp://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/


2

คำตอบนี้ช้าไปหน่อย แต่ฉันพบหัวข้อนี้และ (หลังจากได้ยินคำติชมเชิงลบทั้งหมดเกี่ยวกับ Everyauth) ตัดสินใจใช้ Passport ... แล้วก็เกลียดมัน มันทึบแสงทำงานเป็นมิดเดิลแวร์เท่านั้น (เช่นคุณไม่สามารถพิสูจน์ตัวตนจากปลายทาง GraphQL ได้) และฉันพบข้อผิดพลาดมากกว่าหนึ่งรายการ (เช่นฉันจะมี Express สองเซสชันได้อย่างไร )

ดังนั้นผมจึงมองและพบhttps://github.com/jed/authom สำหรับความต้องการของฉันนี่คือห้องสมุดที่ดีกว่ามาก! เป็นระดับที่ต่ำกว่าไลบรารีอีกสองแห่งเล็กน้อยดังนั้นคุณต้องทำสิ่งต่างๆเช่นการกำหนดให้ผู้ใช้เข้าสู่เซสชันด้วยตัวเอง ... แต่นั่นเป็นเพียงบรรทัดเดียวดังนั้นจึงไม่ใช่เรื่องใหญ่

ที่สำคัญกว่านั้นการออกแบบช่วยให้คุณควบคุมได้มากขึ้นทำให้ง่ายต่อการใช้การอนุญาตของคุณในแบบที่คุณต้องการและไม่ใช่วิธีที่ Passport ตั้งใจไว้ นอกจากนี้เมื่อเทียบกับ Passport แล้วมันง่ายกว่าและเรียนรู้ได้ง่ายกว่ามาก


1

สังเกตวันที่ของโพสต์นี้จะระบุความเกี่ยวข้องของโพสต์นี้

จากประสบการณ์ของฉัน Everyauth ไม่ได้ทำงานนอกกรอบด้วยสไตล์การเข้าสู่ระบบด้วยรหัสผ่าน ฉันใช้ express3 และฉันประกาศมิดเดิลแวร์ของฉันเช่นนั้นapp.use(everyauth.middleware(app));และมันก็ยังไม่ได้ส่งผ่านไปยังเทมเพลตของฉัน คอมมิตคอมครั้งสุดท้ายคือปีที่แล้วและฉันคิดว่าแพ็คเกจใหม่ ๆ พังทุกอย่าง ตอนนี้กำลังจะลองพาสปอร์ต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.