
مكتبة Flask لبناء مزودي خدمة SAML ومزودي الهوية
.. note:: بحثاً عن مشرفين. هذا المشروع لم يعد قيد الصيانة. المكتبة تعمل، أو كانت تعمل عندما استخدمتها آخر مرة، لكنني لم أعد أعمل على المشروع الذي بُنيت من أجله. إذا كنت مهتماً بتولي قيادة هذا المشروع وصيانته، فيُرجى التواصل معي.
.. image:: https://travis-ci.com/timheap/flask-saml2.svg?branch=master :target: https://travis-ci.com/timheap/flask-saml2 .. image:: https://badge.fury.io/py/flask-saml2.svg :target: https://pypi.org/project/flask-saml2/ .. image:: https://readthedocs.org/projects/flask-saml2/badge/?version=latest :target: https://flask-saml2.readthedocs.io/en/latest/
توفر إضافة Flask هذه وظائف لإنشاء كلٍّ من موفري الخدمة وموفري الهوية في بروتوكول SAML. يمكن للتطبيقات تنفيذ أحد هذين الموفّرين أو كليهما.
يعمل flask-saml2 مع Flask 1.0+ وPython 3.6+.
هذا فرع معدَّل بشكل كبير من NoodleMarkets/dj-saml-idp، وهو بدوره فرع من deforestg/dj-saml-idp، وهو بدوره فرع من novapost/django-saml2-idp_.
للحصول على وصف كامل لكيفية عمل SAML، يُرجى البحث عن أدلة في أماكن أخرى على الإنترنت. للحصول على مقدمة سريعة، واستعراض لبعض المصطلحات المستخدمة في هذه الحزمة، تابع القراءة.
بروتوكول SAML هو حوار بين طرفين: موفِّرو الهوية (IdP) وموفِّرو الخدمة (SP). عندما يصل عميل غير مصادَق (عادةً متصفح) إلى موفِّر الخدمة، يُنشئ موفِّر الخدمة طلب مصادقة (AuthnRequest)، ويوقّعه باستخدام مفتاحه الخاص، ثم يعيد توجيه هذا الطلب عبر العميل إلى موفِّر الهوية. بمجرد تسجيل دخول العميل لدى موفِّر الهوية المركزي، يُنشئ موفِّر الهوية استجابة، ويوقّعها، ويعيد توجيهها عبر العميل إلى موفِّر الخدمة الطالب. عندها يتم مصادقة العميل على موفِّر الخدمة عبر موفِّر الهوية المركزي، دون أن يحتاج موفِّر الخدمة إلى معرفة أي شيء عن أسلوب المصادقة أو أي كلمات مرور متضمنة.
يمكن العثور على تنفيذ مثال بسيط لكنه وظيفي لكلٍّ من موفِّر الخدمة وموفِّر الهوية في دليل examples/ في هذا المستودع. لتشغيل الأمثلة، استنسخ المستودع أولاً ثم ثبِّت التبعيات:
.. code-block:: console
$ git clone https://github.com/timheap/flask-saml2
$ cd flask-saml2
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -e .
$ pip install -r tests/requirements.txt
بعد ذلك، شغّل IdP وSP في نافذتَي طرفية منفصلتين:
.. code-block:: console
$ cd flask-saml2
$ source venv/bin/activate
$ ./examples/idp.py
.. code-block:: console
$ cd flask-saml2
$ source venv/bin/activate
$ ./examples/sp.py
أخيراً، انتقل إلى http://localhost:9000/ للوصول إلى الصفحة الرئيسية لموفِّر الخدمة.
مشغّل الاختبارات هو pytest، ونستخدم tox لتشغيل الاختبارات ضد
إصدارات مختلفة من Flask وPython. يمكن تشغيل الاختبارات محلياً باستخدام
tox مباشرة (يُفضَّل في بيئة افتراضية)::
$ pip install tox
$ tox
موزَّعة بموجب رخصة MIT_.
.. _NoodleMarkets/dj-saml-idp: https://github.com/NoodleMarkets/dj-saml-idp
.. _deforestg/dj-saml-idp: https://github.com/deforestg/dj-saml-idp
.. _novapost/django-saml2-idp: https://github.com/novapost/django-saml2-idp
.. _رخصة MIT: https://github.com/mobify/dj-saml-idp/blob/master/LICENSE