لدي منتدى Discourse يعمل، حيث يمكن للمستخدمين إنشاء تسجيل دخول محلي (اسم مستخدم + كلمة مرور).
أود إعادة استخدام اسم المستخدم وكلمة المرور الخاصة بهم في تطبيق آخر. بمعنى آخر: سيدخل المستخدمون اسم المستخدم وكلمة المرور الخاصة بهم في التطبيق الآخر، ويجب أن يكون التطبيق قادرًا على التحقق مما إذا كان هذا تسجيل دخول صالحًا للمنتدى.
لقد قرأت وثائق واجهة برمجة تطبيقات Discourse. العديد من الأشياء ممكنة، بما في ذلك تعيين اسم المستخدم وكلمة المرور لمستخدم معين، لكنني لم أجد نقطة نهاية لواجهة برمجة التطبيقات للتحقق من صحة اسم مستخدم وكلمة مرور موجودين مقابل قائمة مستخدمي المنتدى.
أفترض أن مثل نقطة نهاية واجهة برمجة التطبيقات هذه يجب أن تكون موجودة، حيث يجب أن يكون المنتدى قادرًا على القيام بذلك لتسجيل دخول مستخدم عبر واجهة الويب.
ما هي نقطة نهاية واجهة برمجة التطبيقات للتحقق من اسم المستخدم وكلمة المرور لتسجيل الدخول إلى المنتدى؟
هذه طرق مقترحة للمصادقة على المستخدمين بدلاً من التعامل مع بيانات اعتماد تسجيل الدخول مباشرة. وهذا يعني أيضًا أنك لست بحاجة إلى محاولة التعامل مع تفاصيل المصادقة الثنائية.
ترغب العديد من المواقع التي ترغب في التكامل مع موقع Discourse في الاحتفاظ بجميع تسجيلات المستخدمين في موقع منفصل. في مثل هذا الإعداد، يجب الاستعانة بجميع عمليات تسجيل الدخول إلى هذا الموقع المختلف.
هذا هو عكس ما أريد فعله تمامًا: أريد الاستعانة بجميع عمليات تسجيل الدخول إلى Discourse. هل هناك طريقة لاستخدام DiscourseConnect للقيام بذلك؟
الشيء الصعب هو وجود سر مشترك بين المزود (Discourse) والمستهلك (تطبيقك). إذا قمت بتوزيع تطبيقك، فسيكون لدى المستخدمين إمكانية الوصول إلى جميع الأسرار الموجودة فيه.
قد يعمل وضع وكيل المصادقة (auth-proxy) أمام خدمة ويب مصغرة مخصصة تمنح رمزًا موقعًا لتطبيقك بشكل جيد.
أنا متأكد من وجود طرق أخرى للقيام بذلك لا أفكر فيها.
[اقتباس=“Michael Brown, post:4, topic:266322, username:supermathie”]
الشيء الصعب هو أن هناك سرًا مشتركًا بين المزود (Discourse) والمستهلك (تطبيقك)
[/اقتباس]
هل تشير إلى مفتاح واجهة برمجة التطبيقات (API key)؟ يبدو من الممكن إنشاء مفتاح واجهة برمجة تطبيقات “دقيق”، لديه حق الوصول إلى نقاط نهاية واجهة برمجة تطبيقات محددة فقط. لا يزال غير واضح بالنسبة لي نقاط النهاية المطلوبة، إذا استخدمت هذا النهج. هل تعرف؟
نعم، قد تكون خدمة ويب بسيطة مع وكيل مصادقة (auth-proxy) حلاً جيدًا؛ سأضطر إلى التجربة قليلًا لمعرفة ذلك.
إذا فهمت هذا بشكل صحيح، فإن هذه الطريقة تعني أن المستخدم يسجل الدخول باستخدام متصفح. يمكن أن ينجح ذلك، على الرغم من أنني كنت آمل في العثور على طريقة يمكن من خلالها إدخال اسم المستخدم وكلمة المرور في تطبيق سطح المكتب الخاص بنا، دون فتح متصفح.
أتفهم أن النهج الذي أفكر فيه لن يدعم المصادقة الثنائية (TFA) ما لم أقم بتنفيذها بنفسي، وأنه لن يدعم تسجيل الدخول عبر موفري الطرف الثالث (Google، Facebook، Discord، …)
على حد فهمي في هذه اللحظة، يبدو أن الطريقة المستخدمة في مثال React Native يمكن نقلها إلى تطبيق سطح المكتب الخاص بنا (وهو مكتوب بلغة Python).
نقطة الوصول إلى واجهة برمجة التطبيقات المستخدمة تبدو هي <site>/session، وهي تأخذ اسم مستخدم وكلمة مرور ورمز CSRF. يمكن الحصول على رمز CSRF من <site>/session/csrf.
هذا قريب جدًا مما كنت أبحث عنه. أعتقد أنني سأجرب ذلك، وسأبلغكم إذا نجح معي.
هل نقطة الوصول إلى واجهة برمجة التطبيقات <site>/session موثقة في أي مكان؟
أفضل طريقة للحصول على ما تريده في تطبيق سطح مكتب هي استخدام مفاتيح واجهة برمجة تطبيقات المستخدم.
أنت بحاجة إلى واجهة ويب إما في التطبيق أو عن طريق فتح المتصفح، ولكن إذا جعلت تطبيقك معالجًا للبروتوكول الذي تستخدمه التطبيقات المحمولة، فيمكنك بسهولة الحصول على الرمز المميز بهذه الطريقة ولن تحتاج إلى استخدام المتصفح مرة أخرى إلا إذا انتهت صلاحية الرمز المميز أو استخدموا جهازًا مختلفًا.
تجربتي الشخصية مع هذا هي أن استخدام مفاتيح واجهة برمجة تطبيقات المستخدم هو خيار أكثر أمانًا وبساطة من محاولة استخدام نقاط نهاية الجلسة.
إليك 20 سطرًا من كود بايثون تقوم بنفس الشيء تقريبًا مثل كود React Native المشار إليه بواسطة @renato (باستثناء عدم وجود توافق مع Discourse 2.5 - لا أحتاج إلى ذلك)
إنه يعمل بشكل جيد، بافتراض أنك تستخدم تسجيل الدخول الأساسي المستند إلى اسم المستخدم وكلمة المرور. سأبحث أيضًا في الطرق البديلة، باستخدام تسجيل الدخول Discourse SSO كما هو مهيأ في مثيل Discourse.
لقد حاولت تطبيق هذا ولكن لم أتمكن من جعله يعمل. فيما يلي بعض أكواد Python (المبسطة) التي تنشئ عنوان URL لـ .../session/sso_provider. عندما أحاول، أحصل على Login Error. لا فكرة عما يعنيه ذلك.
بصفتك مسؤولاً، قم بتمكين “تسجيل اتصال الخطاب المطول”، جرب ذلك، ثم تحقق من /logs في منتداك لرؤية المزيد من الأخطاء التفصيلية، على سبيل المثال https://forum.embeetle.com/logs