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، اتبع الخطوات التالية:
قم بتسجيل الدخول إلى حسابك في Casdoor على http://your-casdoor-url.com/login/.
في العمود العلوي للتنقل، انقر على Application. في صفحة Application التي تفتح، انقر على زر Add في الزاوية العلوية اليسرى.
في صفحة Edit Application التي تفتح، غير القيمة في حقول Name و Display name إلى اسم التطبيق الذي تقوم بتمكين SSO له. هنا، نحن نستخدم NGINX Plus.
في حقل Redirect URLs، اكتب عنوان URL لمثيل NGINX Plus بما في ذلك رقم المنفذ، وينتهي بـ /_codexch (في هذا الدليل هو https://your-site-url.com:443/_codexch).
ملاحظات:
- للإنتاج، نوصي بشدة باستخدام SSL/TLS (المنفذ 443).
- رقم المنفذ إلزامي حتى عند استخدام المنفذ الافتراضي لـ HTTP (80) أو HTTPS (443).
سجل القيم في حقول Client ID و Client Secret. سوف تنسخها إلى ملف تكوين NGINX Plus في الخطوة 4 من تكوين NGINX Plus.
انقر على Roles في العمود العلوي للتنقل، ثم انقر على زر Add في الزاوية العلوية اليسرى من الصفحة التي تفتح.
في الصفحة Add التي تفتح، اكتب قيمة في حقول Name و Display Name (هنا هو nginx-casdoor-role) وانقر على زر Save.
في العمود العلوي للتنقل، انقر على Users. في صفحة Users التي تفتح، انقر إما على Edit لتعديل أحد المستخدمين الحاليين أو انقر على زر Add في الزاوية العلوية اليسرى لإنشاء مستخدم جديد.
في الصفحة Add التي تفتح، قم بتعديل Name و Display Name كما ترغب (هنا هو user1).
اختر NGINX Plus في Signup application.
في حقل Managed accounts، اختر NGINX Plus في Application واملأ اسم المستخدم وكلمة المرور.
عد إلى صفحة الأدوار وانقر على تحرير في صف nginx-casdoor-role. في الصفحة التي تم فتحها، في حقل المستخدمين الفرعيين، اختر اسم المستخدم الذي قمت بإنشائه للتو (هنا هو built-in/user1).
تكوين NGINX Plus
لتكوين NGINX Plus كطرف معتمد على OpenID Connect، اتبع هذه الخطوات:
ابدأ بإنشاء نسخة من مستودع nginx-openid-connect على GitHub:
git clone https://github.com/nginxinc/nginx-openid-connect
انسخ الملفات التالية من النسخة إلى دليل /etc/nginx/conf.d:
- frontend.conf
- openid_connect.js
- openid_connect.server_conf
- openid_connect_configuration.conf
استرجع عناوين 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",
"...":"...",
}افتح /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 من تكوين Casdoormap $host $oidc_client_secret
– استخدم القيمة في حقل سر العميل من الخطوة 2 من تكوين Casdoormap $host $oidc_hmac_key
– استخدم عبارة فريدة وطويلة وآمنة
قم بتكوين ملف JWK بناءً على إصدار NGINX Plus المستخدم:
- في NGINX Plus R17 والإصدارات الأحدث، يمكن لـ NGINX Plus قراءة ملف JWK مباشرةً من العنوان المحدد كـ
jwks_uri
في الخطوة 3. قم بإجراء التغييرات التالية على /etc/nginx/conf.d/frontend.conf:- علق (أو أزل) التوجيه auth_jwt_key_file.
- ألغ تعليق التوجيه auth_jwt_key_request. (المعامل
/_jwks_uri
يشير إلى قيمة المتغير$oidc_jwt_keyfile
، والذي سيتم تعيينه في الخطوة التالية.) - حدث قيمة المعامل "الافتراضي" للتوجيه
map $host $oidc_jwt_keyfile
إلى القيمة المستخرجة من حقلjwks_uri
في الخطوة 3 (في هذا الدليل،http://<casdoor-server-address>/.well-known/jwks
).
- في NGINX Plus R16 والإصدارات الأقدم، أو إذا كان مفضلاً، يجب أن يكون ملف JWK موجودًا على القرص المحلي. اتبع هذه الخطوات:
- انسخ محتويات JSON من ملف JWK المحدد في حقل
jwks_uri
في الخطوة 3 (في هذا الدليل،http://<casdoor-server-address>/.well-known/jwks
) إلى ملف محلي (مثل،/etc/nginx/my_casdoor_jwk.json
). - في /etc/nginx/conf.d/openid_connect_configuration.conf، غير قيمة المعامل "الافتراضي" للتوجيه
map $host $oidc_jwt_keyfile
إلى مسار الملف المحلي.
- انسخ محتويات JSON من ملف JWK المحدد في حقل
- في NGINX Plus R17 والإصدارات الأحدث، يمكن لـ NGINX Plus قراءة ملف JWK مباشرةً من العنوان المحدد كـ
تأكد من أن المستخدم المحدد في التوجيه user ضمن ملف تكوين NGINX Plus (عادةً /etc/nginx/nginx.conf) لديه صلاحيات القراءة لملف JWK.
الاختبار
افتح متصفحًا وأدخل عنوان نسخة NGINX Plus الخاصة بك. ثم، حاول تسجيل الدخول باستخدام بيانات اعتماد مستخدم تم تعيين دور NGINX Plus له.
استكشاف الأخطاء وإصلاحها
يرجى الرجوع إلى قسم استكشاف الأخطاء وإصلاحها في مستودع nginx-openid-connect على GitHub.