ฉันจะจัดเก็บรหัสผู้ใช้และความลับ OAuth v1 สำหรับไคลเอนต์ Twitter บนเดสก์ท็อปโอเพนซอร์สได้อย่างไรโดยไม่เปิดเผยให้ผู้ใช้เห็น


32

ฉันต้องการสร้างไคลเอนต์หนาเดสก์ท็อปไคลเอนต์ทวิตเตอร์โอเพนซอร์ส ฉันเคยใช้. NET เป็นภาษาของฉันและTwitterizerเป็น wrapper OAuth / Twitter ของฉันและแอพของฉันน่าจะเปิดตัวเป็นโอเพ่นซอร์ส

ในการรับโทเค็น OAuth ต้องมีข้อมูลสี่ชิ้น:

  1. เข้าสู่ Token (ชื่อผู้ใช้ตัวสั่นด้วยความตื่นเต้น)
  2. การเข้าถึงลับ (รหัสผ่าน Twitter)
  3. รหัสผู้ใช้
  4. ความลับของผู้บริโภค

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

ดังนั้นคำถามของฉันคือฉันจะแก้ไขปัญหานี้ได้อย่างไร กลยุทธ์ที่เหมาะสมสำหรับไคลเอนต์ Twitter บนเดสก์ท็อปคือการปกป้องรหัสผู้บริโภคและความลับ?


+1 ฉันมีความกังวลเดียวกันนี้มากเกินไป อย่างไรก็ตามคำถามนั้นไม่ได้เจาะจงเฉพาะกับสภาพแวดล้อมเดสก์ท็อปหรือ Twitter - สคีมาการตรวจสอบความถูกต้องนี้เป็นเรื่องธรรมดามากในบรรดาเว็บเซอร์วิสที่ฉันเชื่อ
vemv

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

1
+1 ฉันอยากรู้ว่าการปฏิบัติที่ดีที่สุดคืออะไรที่นี่ ในแอปพลิเคชัน Qt ของฉันฉันใช้ OAuth แต่ฉันเก็บรายละเอียดของผู้บริโภคเป็นสตริง (QString) ในไบนารี
fejd

1
เจฟฟ์พวกเขาเป็นไปได้ที่ดีมากที่ฉันทำอะไรผิดอย่างสิ้นเชิงกับ OAuth ฉันเริ่มรู้สึกว่าฉันได้รับสิทธิ์ให้ใช้คีย์ผู้บริโภค / คู่ความลับเพื่อสร้างความลับชั่วคราวและการมีบริการเว็บเพื่อสร้างความลับเหล่านั้นอยู่ที่ไหนสักแห่งเป็นวิธีที่จะไป การใช้คำถามทั่วไปเกินกว่า OAuth จะทำให้พลาดคำตอบเช่นนั้น
Justin Dearing

คำตอบ:


5

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


3

ฉันอาจจะผิด แต่ถ้าคุณมัดกุญแจกับเดสก์ท็อปหรือแอพมือถือโอเพนซอร์สหรือไม่ก็เป็นไปได้ที่จะเข้าถึงพวกเขา หากบริการอย่าง Twitter และ Tumblr บังคับให้เราใช้ OAuth-only API เรามีสองตัวเลือก:

  • ตั้งค่าบริการ proxy รับรองความถูกต้องสำหรับทุกแอพ
  • ปุ่มมัดด้วยแอพ

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

ท้ายที่สุดมีตัวเลือกเพื่อบังคับให้ผู้ใช้ทุกคนได้รับคีย์ API


3

ส่วนที่ 4.6 ของ RFC 5849ซึ่งกำหนด OAuth 1 ระบุว่าความลับของผู้บริโภคไม่เคยถูกใช้โดยผู้ใช้เดสก์ท็อปแม้จะมีการใช้ Twitter ในทางปฏิบัติ ดังที่เนลสันเอลเฮจชี้ให้เห็นใน " Dear Twitter " Twitter สามารถและยกเลิกคีย์ผู้บริโภคของไคลเอ็นต์เดสก์ท็อปโดยที่ลูกค้าไม่ใหญ่เกินกว่าที่จะล้มเหลว แต่มีวิธีแก้ไขสองวิธีที่อนุญาตให้ใช้ OAuth 1 ในเดสก์ท็อปหรือแอปพลิเคชันมือถือ

วิธีหนึ่งคือการพร็อกซีโปรโตคอล Twitter ทั้งหมดผ่านเซิร์ฟเวอร์ที่คุณใช้งาน ด้วยวิธีนี้ความลับของผู้บริโภคจะยังคงอยู่บนเซิร์ฟเวอร์ของคุณ นี่เป็นวิธีแก้ปัญหาที่ Dick Hardt แนะนำโดยบรรณาธิการของ OAuth 1 spec วิธีแก้ปัญหานี้ไม่ได้อยู่ที่ค่าใช้จ่ายในการดำเนินงานเซิร์ฟเวอร์นี้

วิธีอื่นตามที่แนะนำในโพสต์โดย Raffi Krikorianถึงกลุ่มพัฒนา Twitter พูดคุยกับ Google และโพสต์โดย Chris Steippไปยังรายชื่อผู้รับจดหมายของ Wikipedia คือ "ให้ผู้ใช้แต่ละคนลงทะเบียนสำเนาแอพพลิเคชันบนเดสก์ท็อปของคุณ จากนั้นผู้ใช้จะคัดลอกและวางรหัสผู้ใช้บริการที่ลงทะเบียนใหม่และข้อมูลลับของผู้บริโภคลงในใบสมัครของคุณ คู่มือสำหรับแอปพลิเคชันของคุณจะต้องมีคำแนะนำโดยละเอียดเกี่ยวกับวิธีการลงทะเบียนแอปพลิเคชันใหม่บนเว็บไซต์นักพัฒนาของ Twitter ข้อ จำกัด อย่างเป็นทางการนี้มีปัญหาในทางปฏิบัติไม่กี่:

  • ลูกค้าของคุณจะเผชิญกับข้อเสียเปรียบในการใช้งานเมื่อเปรียบเทียบกับลูกค้าที่มีชื่อเสียง
  • รูปแบบในการสร้างแอปใหม่ไม่ปรากฏที่จะนำเสนอวิธีการเติมข้อมูลล่วงหน้าในเขตข้อมูลที่จำเป็น ซึ่งหมายความว่าคุณจะต้องอัปเดตคำแนะนำการลงทะเบียนในคู่มือของคุณเมื่อใดก็ตามที่ Twitter เปลี่ยนขั้นตอนการลงทะเบียนแอพ
  • ข้อตกลงนักพัฒนาซอฟต์แวร์กำหนดให้ผู้ใช้มีอายุบรรลุนิติภาวะเพื่อเข้าทำสัญญาที่มีผลผูกพัน ซึ่งหมายความว่าผู้ใช้แอปพลิเคชันของคุณอายุ 13 ถึง 17 ปีจะต้องมีผู้ปกครองยอมรับข้อตกลงในนามของผู้ใช้
  • นโยบายนักพัฒนาของ Twitter ไม่อนุญาตให้มีแอปพลิเคชั่นที่ลงทะเบียนจำนวนมากและ "name squatting" ซึ่งระบุว่าเป็น ฉันไม่ทราบมาก่อนเลยว่า Twitter นั้นปฏิบัติต่อผู้ใช้ที่ไม่เกี่ยวข้องซึ่งลงทะเบียนสำเนาแยกต่างหากของแอปพลิเคชันหนึ่งว่า "ชื่อผู้ตั้งถิ่นฐาน"

-2

ฉันจะตอบ แต่ได้รับการเตือนว่าฉันไม่ได้จัดการกับตัวเองฉันจะออกไปจากการปฏิบัติที่ดีที่สุดและประสบการณ์ที่เกี่ยวข้องที่มีอยู่;

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

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

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

การเปิดเผยแบบเต็มฉันไม่คุ้นเคยกับ Twitters API, API ของ twitterizer ข้อกำหนด oauth หรืออะไรก็ตามที่ฉันบอกว่าฟังดูน่าสงสัย;)


4
มันไม่เกี่ยวกับการพยายามควบคุมกับพวกเขาเกี่ยวกับโปรแกรม คีย์ comsumer และความลับคือวิธีที่ฉันบอกทวิตเตอร์ "แอพนี้มาโดยฉัน" เหมือนใบรับรอง SSL ที่ให้ความไว้วางใจ ฉันจะไม่แจกจ่ายใบรับรอง SSL ด้วยแอปพลิเคชันเว็บที่ฉันเขียน หากผู้คนแก้ไขแอพของฉันพวกเขาควรสมัครใช้รหัสผู้บริโภค / ความลับของตนเองและลงทะเบียนตัวเองในฐานะผู้เขียนแอพจาก twitter สำหรับงานสร้างของพวกเขา
Justin Dearing

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

-4

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

ดูโพสต์บล็อกนี้สำหรับข้อมูลเพิ่มเติมตามที่แสดงวิธีการทำงานของโปรโตคอล

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