التخطي إلى المحتوى الرئيسي

Nginx

تمكين تسجيل الدخول الموحد المبني على OpenID Connect للتطبيقات التي يتم توكيلها بواسطة NGINX Plus باستخدام Casdoor كمزود للهوية (IdP).

يشرح هذا الدليل كيفية تمكين تسجيل الدخول الموحد (SSO) للتطبيقات التي يتم توكيلها بواسطة NGINX Plus. الحل يستخدم OpenID Connect كآلية للمصادقة، مع Casdoor كمزود للهوية (IdP)، و NGINX Plus كالطرف المعتمد.

انظر أيضًا: يمكنك العثور على مزيد من المعلومات حول تكامل NGINX Plus مع OpenID Connect في مستودع البرنامج على GitHub.

المتطلبات الأساسية

تفترض التعليمات أن لديك ما يلي:

  • خادم Casdoor يعمل. راجع توثيق Casdoor لـ تثبيت الخادم و التجربة باستخدام Docker.

  • اشتراك NGINX Plus و NGINX Plus R15 أو أحدث. للحصول على تعليمات التثبيت، انظر إلى دليل إدارة NGINX Plus.

  • وحدة JavaScript لـ NGINX المتوفرة في NGINX JavaScript module، والتي تعتبر ضرورية للتعامل مع التفاعل بين NGINX Plus ومزود الهوية (IdP). بعد تثبيت NGINX Plus، قم بتثبيت الوحدة باستخدام الأمر المناسب لنظام التشغيل الخاص بك.

    لنظامي Debian و Ubuntu:

    sudo apt install nginx-plus-module-njs

    لأنظمة CentOS، RHEL، و Oracle Linux:

    sudo yum install nginx-plus-module-njs
  • يجب تضمين التوجيه التالي في سياق التكوين العلوي ("main") في /etc/nginx/nginx.conf من أجل تحميل وحدة JavaScript لـ NGINX:

    load_module modules/ngx_http_js_module.so;

تكوين Casdoor

ملاحظة: تعكس الإجراءات التالية واجهة Casdoor GUI في وقت النشر، ولكن الواجهة قابلة للتغيير. استخدم هذا الدليل كمرجع وقم بالتكيف مع واجهة Casdoor الحالية حسب الضرورة.

لإنشاء عميل Casdoor لـ NGINX Plus في واجهة Casdoor GUI، اتبع الخطوات التالية:

  1. قم بتسجيل الدخول إلى حسابك في Casdoor على http://your-casdoor-url.com/login/.

  2. في العمود العلوي للتنقل، انقر على Application. في صفحة Application التي تفتح، انقر على زر Add في الزاوية العلوية اليسرى.

    addApp

  3. في صفحة Edit Application التي تفتح، غير القيمة في حقول Name و Display name إلى اسم التطبيق الذي تقوم بتمكين SSO له. هنا، نحن نستخدم NGINX Plus.

    appName

    في حقل Redirect URLs، اكتب عنوان URL لمثيل NGINX Plus بما في ذلك رقم المنفذ، وينتهي بـ /_codexch (في هذا الدليل هو https://your-site-url.com:443/_codexch).

    redirectURL

    ملاحظات:

    • للإنتاج، نوصي بشدة باستخدام SSL/TLS (المنفذ 443).
    • رقم المنفذ إلزامي حتى عند استخدام المنفذ الافتراضي لـ HTTP (80) أو HTTPS (443).
  4. سجل القيم في حقول Client ID و Client Secret. سوف تنسخها إلى ملف تكوين NGINX Plus في الخطوة 4 من تكوين NGINX Plus.

    العميل

  5. انقر على Roles في العمود العلوي للتنقل، ثم انقر على زر Add في الزاوية العلوية اليسرى من الصفحة التي تفتح.

    addRole

  6. في الصفحة Add التي تفتح، اكتب قيمة في حقول Name و Display Name (هنا هو nginx-casdoor-role) وانقر على زر Save.

    roleName

  7. في العمود العلوي للتنقل، انقر على Users. في صفحة Users التي تفتح، انقر إما على Edit لتعديل أحد المستخدمين الحاليين أو انقر على زر Add في الزاوية العلوية اليسرى لإنشاء مستخدم جديد.

  8. في الصفحة Add التي تفتح، قم بتعديل Name و Display Name كما ترغب (هنا هو user1).

    userName

    اختر NGINX Plus في Signup application.

    signupApp

    في حقل Managed accounts، اختر NGINX Plus في Application واملأ اسم المستخدم وكلمة المرور.

    managedAcc

  9. عد إلى صفحة الأدوار وانقر على تحرير في صف nginx-casdoor-role. في الصفحة التي تم فتحها، في حقل المستخدمين الفرعيين، اختر اسم المستخدم الذي قمت بإنشائه للتو (هنا هو built-in/user1).

    subUsers

تكوين NGINX Plus

لتكوين NGINX Plus كطرف معتمد على OpenID Connect، اتبع هذه الخطوات:

  1. ابدأ بإنشاء نسخة من مستودع nginx-openid-connect على GitHub:

    git clone https://github.com/nginxinc/nginx-openid-connect
  2. انسخ الملفات التالية من النسخة إلى دليل /etc/nginx/conf.d:

    • frontend.conf
    • openid_connect.js
    • openid_connect.server_conf
    • openid_connect_configuration.conf
  3. استرجع عناوين URL لنقطة نهاية التفويض، ونقطة نهاية الرمز، وملف مفتاح الويب JSON (JWK) من تكوين Casdoor. افتح الطرفية ونفذ الأمر curl التالي، مع توجيه الناتج إلى الأمر python المشار إليه لتوليد تنسيق تكوين قابل للقراءة. للاختصار، قمنا بتقطيع الناتج لعرض الحقول ذات الصلة فقط.

    curl http://<casdoor-server-address>/.well-known/openid-configuration | python -m json.tool
    {
    "authorization_endpoint": "https://<casdoor-server-address>/login/oauth/authorize",
    "...":"...",
    "token_endpoint": "http://<casdoor-server-address>/api/login/oauth/access_token",
    "...":"...",
    "jwks_uri": "http://<casdoor-server-address>/.well-known/jwks",
    "...":"...",
    }
  4. افتح /etc/nginx/conf.d/openid_connect_configuration.conf باستخدام محرر النصوص المفضل لديك. عدل قيمة المعامل "الافتراضي" لكل من التوجيهات map التالية بالقيم المحددة:

    • map $host $oidc_authz_endpoint – استخدم قيمة authorization_endpoint من الخطوة 3 (في هذا الدليل، https://<casdoor-server-address>/login/oauth/authorize)
    • map $host $oidc_token_endpoint – استخدم قيمة token_endpoint من الخطوة 3 (في هذا الدليل، http://<casdoor-server-address>/api/login/oauth/access_token)
    • map $host $oidc_client – استخدم القيمة في حقل معرف العميل من الخطوة 4 من تكوين Casdoor
    • map $host $oidc_client_secret – استخدم القيمة في حقل سر العميل من الخطوة 2 من تكوين Casdoor
    • map $host $oidc_hmac_key – استخدم عبارة فريدة وطويلة وآمنة
  5. قم بتكوين ملف JWK بناءً على إصدار NGINX Plus المستخدم:

    • في NGINX Plus R17 والإصدارات الأحدث، يمكن لـ NGINX Plus قراءة ملف JWK مباشرةً من العنوان المحدد كـ jwks_uri في الخطوة 3. قم بإجراء التغييرات التالية على /etc/nginx/conf.d/frontend.conf:
      1. علق (أو أزل) التوجيه auth_jwt_key_file.
      2. ألغ تعليق التوجيه auth_jwt_key_request. (المعامل /_jwks_uri يشير إلى قيمة المتغير $oidc_jwt_keyfile، والذي سيتم تعيينه في الخطوة التالية.)
      3. حدث قيمة المعامل "الافتراضي" للتوجيه map $host $oidc_jwt_keyfile إلى القيمة المستخرجة من حقل jwks_uri في الخطوة 3 (في هذا الدليل، http://<casdoor-server-address>/.well-known/jwks).
    • في NGINX Plus R16 والإصدارات الأقدم، أو إذا كان مفضلاً، يجب أن يكون ملف JWK موجودًا على القرص المحلي. اتبع هذه الخطوات:
      1. انسخ محتويات JSON من ملف JWK المحدد في حقل jwks_uri في الخطوة 3 (في هذا الدليل، http://<casdoor-server-address>/.well-known/jwks) إلى ملف محلي (مثل، /etc/nginx/my_casdoor_jwk.json).
      2. في /etc/nginx/conf.d/openid_connect_configuration.conf، غير قيمة المعامل "الافتراضي" للتوجيه map $host $oidc_jwt_keyfile إلى مسار الملف المحلي.
  6. تأكد من أن المستخدم المحدد في التوجيه user ضمن ملف تكوين NGINX Plus (عادةً /etc/nginx/nginx.conf) لديه صلاحيات القراءة لملف JWK.

الاختبار

افتح متصفحًا وأدخل عنوان نسخة NGINX Plus الخاصة بك. ثم، حاول تسجيل الدخول باستخدام بيانات اعتماد مستخدم تم تعيين دور NGINX Plus له.

اختبار

استكشاف الأخطاء وإصلاحها

يرجى الرجوع إلى قسم استكشاف الأخطاء وإصلاحها في مستودع nginx-openid-connect على GitHub.