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

APISIX

حاليًا، هناك طريقتان لاستخدام Casdoor للاتصال بـ APISIX عبر إضافات APISIX وحماية واجهات برمجة التطبيقات خلف APISIX: باستخدام إضافة Casdoor الخاصة بـ APISIX أو باستخدام إضافة OIDC الخاصة بـ APISIX.

الاتصال بـ Casdoor عبر إضافة Casdoor الخاصة بـ APISIX

هذه الإضافة، authz-casdoor، يمكنها حماية واجهات برمجة التطبيقات خلف APISIX، مما يجبر كل طلب على التوثيق دون تعديل كود واجهة برمجة التطبيقات.

كيفية تفعيله

تحتاج إلى تحديد هذه الإضافة عند إنشاء المسار وتقديم جميع الحقول المطلوبة. إليك مثال.

curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"methods": ["GET"],
"uri": "/anything/*",
"plugins": {
"authz-casdoor": {
"endpoint_addr":"http://localhost:8000",
"callback_url":"http://localhost:9080/anything/callback",
"client_id":"7ceb9b7fda4a9061ec1c",
"client_secret":"3416238e1edf915eac08b8fe345b2b95cdba7e04"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

في هذا المثال، قمنا بإنشاء مسار "/anything/*" يشير إلى "httpbin.org:80" باستخدام واجهة برمجة تطبيقات إدارة APISIX، مع تمكين إضافة "authz-casdoor". هذا المسار الآن تحت حماية المصادقة من Casdoor.

الخصائص

الاسمالنوعالمتطلبالافتراضيصالحالوصف
endpoint_addrstringمطلوبعنوان URL لـ Casdoor.
client_idstringمطلوبمعرف العميل في Casdoor.
client_secretstringمطلوبالسر الخاص بالعميل في Casdoor.
callback_urlstringمطلوبعنوان URL للرد الذي يستخدم لاستقبال الحالة والرمز.

يجب ألا ينتهي عنوان endpoint_addr و callback_url بـ '/'

في تكوين إضافة "authz-casdoor"، يمكننا رؤية أربعة معاملات.

الأول هو "callback_url". هذا هو عنوان URL للرد في OAuth2. يجب التأكيد على أن عنوان URL للرد هذا يجب أن ينتمي إلى "uri" الذي حددته للمسار. على سبيل المثال، في هذا المثال، http://localhost:9080/anything/callback ينتمي بوضوح إلى "/anything/*". فقط بهذه الطريقة، يمكن اعتراض الزيارة نحو عنوان URL للرد واستخدامها من قبل الإضافة (بحيث يمكن للإضافة الحصول على الرمز والحالة في OAuth2). منطق عنوان URL للرد يتم تنفيذه بالكامل من قبل الإضافة، لذلك لا حاجة لتعديل الخادم لتنفيذ هذا الرد.

المعامل الثاني "endpoint_addr" هو بوضوح عنوان URL لـ Casdoor. المعامل الثالث والرابع هما "client_id" و "client_secret"، والتي يمكنك الحصول عليها من Casdoor عند تسجيل تطبيق.

كيف يعمل؟

لنفترض أن مستخدمًا جديدًا لم يزر هذا المسار من قبل ينوي زيارته (http://localhost:9080/anything/d?param1=foom2=bar). بالنظر إلى أن "authz-casdoor" مفعل، فإن هذه الزيارة ستتم معالجتها بواسطة إضافة "authz-casdoor" أولاً. بعد التحقق من الجلسة والتأكد من أن هذا المستخدم لم يتم توثيقه، سيتم اعتراض الزيارة. مع الاحتفاظ بالرابط الأصلي الذي يرغب المستخدم في زيارته، سيتم إعادة توجيهه إلى صفحة تسجيل الدخول الخاصة بـ Casdoor.

بعد تسجيل الدخول بنجاح باستخدام اسم المستخدم وكلمة المرور (أو أي طريقة أخرى يستخدمونها)، سيقوم Casdoor بإعادة توجيه هذا المستخدم إلى "callback_url" مع تحديد معاملات GET "code" و "state". نظرًا لأن "callback_url" معروف من قبل الإضافة، عندما يتم اعتراض الزيارة نحو "callback_url" هذه المرة، سيتم تشغيل منطق "Authorization code Grant Flow" في OAuth2. هذا يعني أن الإضافة ستطلب رمز الوصول للتأكد من أن هذا المستخدم قد سجل الدخول بالفعل. بعد هذا التأكيد، ستقوم الإضافة بإعادة توجيه هذا المستخدم إلى الرابط الأصلي الذي يرغب في زيارته، والذي تم الاحتفاظ به من قبلنا مسبقًا. كما سيتم الاحتفاظ بحالة تسجيل الدخول في الجلسة.

في المرة القادمة التي يرغب فيها هذا المستخدم في زيارة الرابط خلف هذا المسار (على سبيل المثال، http://localhost:9080/anything/d)، بعد اكتشاف أن هذا المستخدم قد تم توثيقه مسبقًا، لن تقوم الإضافة بإعادة توجيه هذا المستخدم بعد الآن. هكذا، يمكن للمستخدم زيارة ما يريد تحت هذا المسار دون تدخل.

الاتصال بـ Casdoor عبر إضافة OIDC الخاصة بـ APISIX

Casdoor يمكنه استخدام بروتوكول OIDC للاتصال بـ APISIX، وسيوضح لك هذا المستند كيفية القيام بذلك.

فيما يلي بعض الأسماء المستخدمة في التكوين:

CASDOOR_HOSTNAME: اسم النطاق أو عنوان IP حيث يتم نشر خادم Casdoor.

APISIX_HOSTNAME: اسم النطاق أو الـ IP الذي يتم فيه نشر APISIX.

الخطوة 1: نشر Casdoor و APISIX

أولاً، قم بنشر Casdoor و APISIX.

بعد نشر ناجح، تحتاج إلى التأكد من:

  1. يمكن تسجيل الدخول إلى Casdoor واستخدامه بشكل طبيعي.
  2. قم بتعيين قيمة origin لـ Casdoor (conf/app.conf) إلى CASDOOR_HOSTNAME. Casdoor conf

الخطوة 2: تكوين تطبيق Casdoor

  1. إنشاء تطبيق Casdoor جديد أو استخدام واحد موجود.
  2. أضف رابط إعادة التوجيه: http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT، واستبدل REDIRECTWHATYOUWANT برابط إعادة التوجيه المطلوب.
  3. اختر "JWT-Empty" لخيار تنسيق الرمز.
  4. أضف مزود الخدمة المطلوب وقم بتكوين الإعدادات الأخرى.

إعداد التطبيق في صفحة إعدادات التطبيق، ستجد قيم Client ID و Client Secret كما هو موضح في الصورة أعلاه. سنستخدمها في الخطوة التالية.

افتح متصفحك المفضل وزر: http://CASDOOR_HOSTNAME/.well-known/openid-configuration، حيث ستجد تكوين OIDC لـ Casdoor.

الخطوة 3: تكوين APISIX

لدى APISIX دعم رسمي لـ OIDC، والذي يتم تنفيذه باستخدام lua-resty-openidc.

يمكنك تخصيص الإعدادات وفقًا لوثائق APISIX OIDC. سيتم استخدام الإعدادات التالية للتوجيه:

# Use your own X-Api-Key
$ curl -X POST APISIX_HOSTNAME/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
"uri": "/get",
"name": "apisix_casdoor_test",
"plugins": {
"openid-connect": {
"client_id": "Client ID",
"client_secret": "Client Secret",
"discovery": "http://CASDOOR_HOSTNAME/.well-known/openid-configuration",
"introspection_endpoint_auth_method": "client_secret_basic",
"logout_path": "/logout",
"realm": "master",
"redirect_uri": "http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT",
"bearer_only": false,
"set_id_token_header": false,
"access_token_in_authorization_header": true,
"set_access_token_header": true,
"set_userinfo_header": false,
"realm": "master"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

الآن، قم بزيارة http://APISIX_HOSTNAME/get، وسيقوم المتصفح بإعادة توجيهك إلى صفحة تسجيل الدخول Casdoor. بعد تسجيل الدخول بنجاح، سترى أنه تم إرسال طلب إلى httpbin.org كما هو موضح في لقطة الشاشة أدناه. APISIX_Result