استخدام Apache APISIX و Authing لتنفيذ إدارة مصادقة مركزية

API7.ai

January 4, 2022

Ecosystem

مقدمة

حول Apache APISIX

Apache APISIX هو بوابة API ديناميكية وفعالة في الوقت الحقيقي توفر ميزات غنية لإدارة حركة المرور مثل موازنة الحمل، المنبع الديناميكي، الإصدار التدريجي، انهيار الخدمة، المصادقة، المراقبة، وغيرها. لا يدعم Apache APISIX التغييرات الديناميكية للإضافات والتركيب الساخن فحسب، بل يحتوي أيضًا على عدد من الإضافات المفيدة. إضافة OpenID Connect لـ Apache APISIX مع دعم بروتوكول OpenID Connect، يمكن للمستخدمين استخدام هذه الإضافة لتمكين Apache APISIX من التفاعل مع خدمات Authing ونشرها كبوابة مصادقة مركزية في المؤسسة.

حول Authing

Authing هو أول منتج سحابي للهوية يركز على المطورين في الصين، حيث يدمج جميع بروتوكولات الهوية الرئيسية ويوفر خدمات مصادقة وإدارة وصول آمنة وكاملة للمؤسسات والمطورين. مع "API First" كحجر الزاوية للمنتج، يتم تغليف جميع الوظائف الشائعة في مجال الهوية بشكل وحدوي، ويتم توفير جميع القدرات للمطورين من خلال SDK بلغة برمجة كاملة. في الوقت نفسه، يمكن للمستخدمين استخدام واجهات برمجة التطبيقات RESTful المفتوحة لـ Authing بشكل مرن لتوسيع الوظائف لتلبية احتياجات إدارة الهوية للمؤسسات المختلفة في سيناريوهات الأعمال المختلفة.

ما هي المصادقة المركزية

نمط المصادقة التقليدي

في نمط المصادقة التقليدي، تحتاج كل خدمة تطبيق خلفية إلى تطوير وظائف منفصلة لدعم وظيفة المصادقة، مثل التفاعل مع مزود الهوية والحصول على معلومات هوية المستخدم.

تدفق عمل المصادقة التقليدية

نمط المصادقة المركزية للهوية

على عكس نمط المصادقة التقليدي، يأخذ نمط المصادقة المركزية مصادقة المستخدم خارج خدمة التطبيق. خذ Apache APISIX كمثال، يتم عرض عملية المصادقة المركزية في الشكل أعلاه: أولاً، يبدأ المستخدم طلبًا، ثم تكون البوابة الأمامية مسؤولة عن عملية مصادقة المستخدم، والتفاعل مع مزود الهوية وإرسال طلب تفويض إلى مزود الهوية. يعيد مزود الهوية معلومات المستخدم. بعد أن تكمل البوابة تحديد المستخدم، تقوم بإعادة توجيه معلومات هوية المستخدم إلى التطبيق الخلفي في شكل رأس طلب.

تدفق عمل نمط المصادقة المركزية

مزايا نمط المصادقة المركزية للهوية

بالمقارنة مع نمط المصادقة التقليدي، يتمتع نمط المصادقة المركزية بالمزايا التالية.

  1. تبسيط عملية تطوير التطبيق، تقليل عبء العمل على التطبيق وتكاليف الصيانة، وتجنب التطوير المتكرر لمنطق المصادقة لكل تطبيق.
  2. تحسين أمان الأعمال، يمكن لنمط المصادقة المركزية على مستوى البوابة اعتراض الطلبات غير المصادق عليها في الوقت المناسب لحماية التطبيقات الخلفية.

في الوقت نفسه، مع دمج وظائف إدارة المصادقة القوية لـ Authing، يمكن تحقيق الوظائف التالية.

  1. إدارة دورة حياة خدمات المصادقة من خلال لوحة التحكم، بما في ذلك الإنشاء، التمكين، التعطيل، إلخ.
  2. مراقبة التطبيق في الوقت الحقيقي وبصريًا، بما في ذلك: عدد طلبات الواجهة، وقت استدعاء الواجهة ومعلومات الخطأ في الواجهة، وإشعار الإنذار في الوقت الحقيقي.
  3. تسجيل مركزي لتسجيل الدخول والخروج للمستخدمين بسهولة، ومعلومات حول التعديلات والتعديلات على التطبيق.

يمكن العثور على المزيد من التفاصيل في بوابة الوصول إلى Authing.

كيفية تنفيذ المصادقة المركزية للهوية باستخدام Apache APISIX و Authing

الخطوة 1: تكوين Authing

  1. قم بتسجيل الدخول إلى حساب Authing الخاص بك، حدد "بناء تطبيقك الخاص" واملأ اسم التطبيق وعنوان المصادقة. إذا لم يكن لديك حساب Authing، يرجى زيارة Authing، انقر على "تسجيل الدخول/التسجيل" في الزاوية اليمنى العليا لتسجيل حساب Authing. تكوين Authing
  2. انقر على "إنشاء" لإنشاء تطبيق Authing. إنشاء تطبيق Authing
  3. أثناء عملية المصادقة، سترفض Authing عناوين URL الاستدعاء الأخرى غير المكونة. نظرًا لأن هذا اختبار محلي، يتم تعيين عنوان URL لاستدعاء تسجيل الدخول وعنوان URL لاستدعاء تسجيل الخروج على عنوان وصول APISIX http://127.0.0.1:9080/. تعيين عنوان URL لتسجيل الدخول والخروج
  4. إنشاء مستخدم (اختياري). في صفحة قائمة المستخدمين، قم بإنشاء مستخدم باسم المستخدم وكلمة المرور user1/user1، ويمكنك تعيين ما إذا كان يسمح بالوصول إلى التطبيق في صفحة "معلومات المستخدم - إدارة التفويض" (الافتراضي هو السماح). إنشاء مستخدم
  5. قم بزيارة صفحة التطبيق للتكوين التالي، وهو مطلوب عند تكوين Apache APISIX OpenID Connect.
    1. معرف التطبيق: معرف عميل OAuth، أي معرف التطبيق، يتوافق مع client_id و {YOUR_CLIENT_ID} أدناه.
    2. سر التطبيق: سر عميل OAuth، أي مفتاح التطبيق. يتوافق مع client_secret و {YOUR_CLIENT_SECRET} أدناه.
    3. عنوان اكتشاف الخدمة: عنوان اكتشاف خدمة التطبيق. يتوافق مع {YOUR_DISCOVERY} أدناه. التكوينات

الخطوة 2: تثبيت Apache APISIX

يمكنك تثبيت Apache APISIX بعدة طرق بما في ذلك الحزم المصدرية، Docker، Helm Chart، إلخ.

تثبيت التبعيات

يتطلب بيئة تشغيل Apache APISIX تبعيات على NGINX و etcd.

قبل تثبيت Apache APISIX، يرجى تثبيت التبعيات وفقًا لنظام التشغيل الذي تستخدمه. نوفر تعليمات تثبيت التبعيات لـ CentOS7، Fedora 31 و 32، Ubuntu 16.04 و 18.04، Debian 9 و 10، و macOS. يرجى الرجوع إلى تثبيت التبعيات لمزيد من التفاصيل.

التثبيت عبر حزمة RPM (CentOS 7)

طريقة التثبيت هذه مناسبة لـ CentOS 7؛ يرجى تشغيل الأمر التالي لتثبيت Apache APISIX.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

التثبيت عبر Docker

يرجى الرجوع إلى تثبيت Apache APISIX باستخدام Docker.

التثبيت عبر Helm Chart

يرجى الرجوع إلى تثبيت Apache APISIX باستخدام Helm Chart.

التثبيت عبر الإصدار المصدر

  1. قم بإنشاء دليل باسم apisix-2.7.
mkdir apisix-2.7
  1. قم بتنزيل حزمة مصدر Apache APISIX Release.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

يمكنك أيضًا تنزيل حزمة مصدر Apache APISIX Release من موقع Apache APISIX. يوفر موقع Apache APISIX الرسمي - صفحة التنزيلات أيضًا حزم مصدر لـ Apache APISIX، لوحة تحكم APISIX، ووحدة تحكم APISIX Ingress.

  1. قم بفك ضغط حزمة مصدر Apache APISIX Release.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  1. قم بتثبيت مكتبات Lua المطلوبة للتشغيل.
# انتقل إلى دليل apisix-2.7
cd apisix-2.7
# إنشاء التبعيات
make deps

تهيئة التبعيات

قم بتشغيل الأمر التالي لتهيئة ملف تكوين NGINX و etcd.

# تهيئة ملف تكوين NGINX و etcd
make init

الخطوة 3: بدء Apache APISIX وتكوين المسار

  1. قم بتشغيل الأمر التالي لبدء Apache APISIX.

    apisix start
    
  2. إنشاء مسارات وتكوين إضافة OpenID Connect. قائمة تكوين OpenID Connect هي كما يلي.

الحقلالقيمة الافتراضيةالوصف
client_idN/Aمعرف عميل OAuth
client_secretN/Aمفتاح سر عميل OAuth
discoveryN/Aنقاط نهاية اكتشاف الخدمة لمزودي الهوية
scopeopenidنطاق الوصول إلى الموارد المطلوب
relmapisixتحديد معلومات المصادقة في رأس استجابة WWW-Authenticate
bearer_onlyfalseما إذا كان سيتم التحقق من الرمز في رأس الطلب
logout_path/logoutURI تسجيل الخروج
redirect_urirequest_uriالعنوان الذي يعيده مزود الهوية، الافتراضي هو عنوان الطلب
timeout3وقت انتهاء الطلب بالثواني
ssl_verifyfalseما إذا كان سيتم التحقق من شهادة SSL لمزود الهوية
introspection_endpointN/Aعنوان URL لنقطة نهاية التحقق من الرمز لمزود الهوية، والذي سيتم استخراجه من استجابة الاكتشاف إذا ترك فارغًا.
introspection_endpoint_auth_methodclient_secret_basicاسم طريقة المصادقة للتحقق من الرمز
public_keyN/Aالمفتاح العام لمصادقة الرمز
token_signing_alg_values_expectedN/Aخوارزمية رموز المصادقة
set_access_token_headertrueما إذا كان سيتم حمل رمز الوصول في رأس الطلب
access_token_in_authorization_headerfalseيتم وضع رمز الوصول في رأس Authorization عندما يكون true، وفي رأس X-Access-Token عندما يكون false.
set_id_token_headerfalseعدم حمل رمز الهوية إلى رأس طلب X-ID-Token
set_userinfo_headerfalseما إذا كان سيتم حمل معلومات المستخدم في رأس طلب X-Userinfo

يوضح مثال الكود التالي إنشاء مسار من خلال واجهة برمجة تطبيقات Apache APISIX Admin، مع تعيين المنبع للمسار على httpbin.org. httpbin.org هو خدمة خلفية بسيطة لاستقبال الطلبات والرد عليها، سيتم استخدام صفحة get في httpbin.org أدناه، راجع http bin get.

للحصول على عناصر التكوين المحددة، يرجى الرجوع إلى إضافة OpenID Connect لـ Apache APISIX.

curl  -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
    "uri":"/*",
    "plugins":{
        "openid-connect":{
            "client_id":"{YOUR_CLIENT_ID}",
            "client_secret":"{YOUR_CLIENT_SECRET}",
            "discovery":"https://{YOUR_DISCOVERY}",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"apisix",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

الخطوة 4: الوصول إلى Apache APISIX

  1. قم بزيارة "http://127.0.0.1:9080/get" وسيتم إعادة توجيه الصفحة إلى صفحة تسجيل الدخول إلى Authing حيث تم تمكين إضافة OpenID Connect بالفعل (يمكن تخصيص هذه الصفحة في لوحة تحكم Authing تحت "التطبيقات - العلامة التجارية"). الوصول إلى Apache APISIX

  2. أدخل كلمة المرور لحساب المستخدم المسجل في Authing، أو المستخدم user1/user1 الذي تم إنشاؤه في الخطوة 1، وانقر على تسجيل الدخول لتسجيل الدخول إلى حساب Authing.

  3. بعد تسجيل الدخول بنجاح، يمكنك الوصول بنجاح إلى صفحة get في httpbin.org. ستقوم صفحة httpbin.org/get بإرجاع البيانات المطلوبة كما يلي.

    ...
    "X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg",
    "X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=",
    "X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ=="
    ...
    

    X-Access-Token: يقوم Apache APISIX بوضع رمز الوصول الذي تم الحصول عليه من مزود الهوية في رأس طلب X-Access-Token، ويمكن وضعه اختياريًا في رأس Authorization من خلال access_token_in_authorization_header في تكوين الإضافة.

    X-Access-Token

    X-Id-Token: يقوم Apache APISIX بوضع رمز الهوية الذي تم الحصول عليه من مزود الهوية في رأس طلب X-Id-Token بعد ترميزه بـ base64، ويمكن تمكين أو تعطيل هذا من خلال set_id_token_header في تكوين الإضافة.

    X-Id-Token

    X-Userinfo: يقوم Apache APISIX بوضع معلومات المستخدم التي تم الحصول عليها من مزود الهوية في X-Userinfo بعد ترميزها بـ base64. يمكنك اختيار ما إذا كنت تريد تمكين هذه الميزة من خلال set_userinfo_header في تكوين الإضافة.

    X-Userinfo

    كما ترى، سيحمل Apache APISIX رؤوس طلب X-Access-Token، X-Id-Token و X-Userinfo إلى المنبع. يمكن للمنبع تحليل هذه الرؤوس للحصول على معلومات هوية المستخدم وبيانات المستخدم.

  4. في "سجل التدقيق - سجل سلوك المستخدم" في لوحة تحكم Authing، يمكنك ملاحظة معلومات تسجيل دخول user1. معلومات تسجيل الدخول

الخلاصة

يصف هذا المقال الخطوات التفصيلية للتفاعل بين Apache APISIX و Authing.

لا يلتزم Apache APISIX فقط بالحفاظ على أدائه العالي، بل يولي أيضًا أهمية كبيرة لبناء بيئة المصادر المفتوحة. حاليًا، يحتوي Apache APISIX على أكثر من 10 إضافات متعلقة بالمصادقة والتفويض تدعم التفاعل مع خدمات المصادقة والتفويض الرئيسية في الصناعة.

إذا كان لديك حاجة للتفاعل مع سلطات مصادقة أخرى، قم بزيارة GitHub لـ Apache APISIX واترك اقتراحاتك عبر issue؛ أو اشترك في قائمة البريد لـ Apache APISIX للتعبير عن أفكارك عبر البريد الإلكتروني.

Tags: