استخدام Apache APISIX و Authing لتنفيذ إدارة مصادقة مركزية
API7.ai
January 4, 2022
مقدمة
حول 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 كمثال، يتم عرض عملية المصادقة المركزية في الشكل أعلاه: أولاً، يبدأ المستخدم طلبًا، ثم تكون البوابة الأمامية مسؤولة عن عملية مصادقة المستخدم، والتفاعل مع مزود الهوية وإرسال طلب تفويض إلى مزود الهوية. يعيد مزود الهوية معلومات المستخدم. بعد أن تكمل البوابة تحديد المستخدم، تقوم بإعادة توجيه معلومات هوية المستخدم إلى التطبيق الخلفي في شكل رأس طلب.
مزايا نمط المصادقة المركزية للهوية
بالمقارنة مع نمط المصادقة التقليدي، يتمتع نمط المصادقة المركزية بالمزايا التالية.
- تبسيط عملية تطوير التطبيق، تقليل عبء العمل على التطبيق وتكاليف الصيانة، وتجنب التطوير المتكرر لمنطق المصادقة لكل تطبيق.
- تحسين أمان الأعمال، يمكن لنمط المصادقة المركزية على مستوى البوابة اعتراض الطلبات غير المصادق عليها في الوقت المناسب لحماية التطبيقات الخلفية.
في الوقت نفسه، مع دمج وظائف إدارة المصادقة القوية لـ Authing، يمكن تحقيق الوظائف التالية.
- إدارة دورة حياة خدمات المصادقة من خلال لوحة التحكم، بما في ذلك الإنشاء، التمكين، التعطيل، إلخ.
- مراقبة التطبيق في الوقت الحقيقي وبصريًا، بما في ذلك: عدد طلبات الواجهة، وقت استدعاء الواجهة ومعلومات الخطأ في الواجهة، وإشعار الإنذار في الوقت الحقيقي.
- تسجيل مركزي لتسجيل الدخول والخروج للمستخدمين بسهولة، ومعلومات حول التعديلات والتعديلات على التطبيق.
يمكن العثور على المزيد من التفاصيل في بوابة الوصول إلى Authing.
كيفية تنفيذ المصادقة المركزية للهوية باستخدام Apache APISIX و Authing
الخطوة 1: تكوين Authing
- قم بتسجيل الدخول إلى حساب Authing الخاص بك، حدد "بناء تطبيقك الخاص" واملأ اسم التطبيق وعنوان المصادقة. إذا لم يكن لديك حساب Authing، يرجى زيارة Authing، انقر على "تسجيل الدخول/التسجيل" في الزاوية اليمنى العليا لتسجيل حساب Authing.
- انقر على "إنشاء" لإنشاء تطبيق Authing.
- أثناء عملية المصادقة، سترفض Authing عناوين URL الاستدعاء الأخرى غير المكونة. نظرًا لأن هذا اختبار محلي، يتم تعيين عنوان URL لاستدعاء تسجيل الدخول وعنوان URL لاستدعاء تسجيل الخروج على عنوان وصول APISIX http://127.0.0.1:9080/.
- إنشاء مستخدم (اختياري). في صفحة قائمة المستخدمين، قم بإنشاء مستخدم باسم المستخدم وكلمة المرور user1/user1، ويمكنك تعيين ما إذا كان يسمح بالوصول إلى التطبيق في صفحة "معلومات المستخدم - إدارة التفويض" (الافتراضي هو السماح).
- قم بزيارة صفحة التطبيق للتكوين التالي، وهو مطلوب عند تكوين Apache APISIX OpenID Connect.
- معرف التطبيق: معرف عميل OAuth، أي معرف التطبيق، يتوافق مع
client_id
و{YOUR_CLIENT_ID}
أدناه. - سر التطبيق: سر عميل OAuth، أي مفتاح التطبيق. يتوافق مع
client_secret
و{YOUR_CLIENT_SECRET}
أدناه. - عنوان اكتشاف الخدمة: عنوان اكتشاف خدمة التطبيق. يتوافق مع
{YOUR_DISCOVERY}
أدناه.
- معرف التطبيق: معرف عميل OAuth، أي معرف التطبيق، يتوافق مع
الخطوة 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.
التثبيت عبر الإصدار المصدر
- قم بإنشاء دليل باسم
apisix-2.7
.
mkdir apisix-2.7
- قم بتنزيل حزمة مصدر 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.
- قم بفك ضغط حزمة مصدر Apache APISIX Release.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
- قم بتثبيت مكتبات Lua المطلوبة للتشغيل.
# انتقل إلى دليل apisix-2.7
cd apisix-2.7
# إنشاء التبعيات
make deps
تهيئة التبعيات
قم بتشغيل الأمر التالي لتهيئة ملف تكوين NGINX و etcd.
# تهيئة ملف تكوين NGINX و etcd
make init
الخطوة 3: بدء Apache APISIX وتكوين المسار
-
قم بتشغيل الأمر التالي لبدء Apache APISIX.
apisix start
-
إنشاء مسارات وتكوين إضافة OpenID Connect. قائمة تكوين OpenID Connect هي كما يلي.
الحقل | القيمة الافتراضية | الوصف |
---|---|---|
client_id | N/A | معرف عميل OAuth |
client_secret | N/A | مفتاح سر عميل OAuth |
discovery | N/A | نقاط نهاية اكتشاف الخدمة لمزودي الهوية |
scope | openid | نطاق الوصول إلى الموارد المطلوب |
relm | apisix | تحديد معلومات المصادقة في رأس استجابة WWW-Authenticate |
bearer_only | false | ما إذا كان سيتم التحقق من الرمز في رأس الطلب |
logout_path | /logout | URI تسجيل الخروج |
redirect_uri | request_uri | العنوان الذي يعيده مزود الهوية، الافتراضي هو عنوان الطلب |
timeout | 3 | وقت انتهاء الطلب بالثواني |
ssl_verify | false | ما إذا كان سيتم التحقق من شهادة SSL لمزود الهوية |
introspection_endpoint | N/A | عنوان URL لنقطة نهاية التحقق من الرمز لمزود الهوية، والذي سيتم استخراجه من استجابة الاكتشاف إذا ترك فارغًا. |
introspection_endpoint_auth_method | client_secret_basic | اسم طريقة المصادقة للتحقق من الرمز |
public_key | N/A | المفتاح العام لمصادقة الرمز |
token_signing_alg_values_expected | N/A | خوارزمية رموز المصادقة |
set_access_token_header | true | ما إذا كان سيتم حمل رمز الوصول في رأس الطلب |
access_token_in_authorization_header | false | يتم وضع رمز الوصول في رأس Authorization عندما يكون true، وفي رأس X-Access-Token عندما يكون false. |
set_id_token_header | false | عدم حمل رمز الهوية إلى رأس طلب X-ID-Token |
set_userinfo_header | false | ما إذا كان سيتم حمل معلومات المستخدم في رأس طلب 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
-
قم بزيارة "http://127.0.0.1:9080/get" وسيتم إعادة توجيه الصفحة إلى صفحة تسجيل الدخول إلى Authing حيث تم تمكين إضافة OpenID Connect بالفعل (يمكن تخصيص هذه الصفحة في لوحة تحكم Authing تحت "التطبيقات - العلامة التجارية").
-
أدخل كلمة المرور لحساب المستخدم المسجل في Authing، أو المستخدم user1/user1 الذي تم إنشاؤه في الخطوة 1، وانقر على تسجيل الدخول لتسجيل الدخول إلى حساب Authing.
-
بعد تسجيل الدخول بنجاح، يمكنك الوصول بنجاح إلى صفحة 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-Id-Token: يقوم Apache APISIX بوضع رمز الهوية الذي تم الحصول عليه من مزود الهوية في رأس طلب X-Id-Token بعد ترميزه بـ base64، ويمكن تمكين أو تعطيل هذا من خلال
set_id_token_header
في تكوين الإضافة.X-Userinfo: يقوم Apache APISIX بوضع معلومات المستخدم التي تم الحصول عليها من مزود الهوية في X-Userinfo بعد ترميزها بـ base64. يمكنك اختيار ما إذا كنت تريد تمكين هذه الميزة من خلال
set_userinfo_header
في تكوين الإضافة.كما ترى، سيحمل Apache APISIX رؤوس طلب
X-Access-Token
،X-Id-Token
وX-Userinfo
إلى المنبع. يمكن للمنبع تحليل هذه الرؤوس للحصول على معلومات هوية المستخدم وبيانات المستخدم. -
في "سجل التدقيق - سجل سلوك المستخدم" في لوحة تحكم Authing، يمكنك ملاحظة معلومات تسجيل دخول user1.
الخلاصة
يصف هذا المقال الخطوات التفصيلية للتفاعل بين Apache APISIX و Authing.
لا يلتزم Apache APISIX فقط بالحفاظ على أدائه العالي، بل يولي أيضًا أهمية كبيرة لبناء بيئة المصادر المفتوحة. حاليًا، يحتوي Apache APISIX على أكثر من 10 إضافات متعلقة بالمصادقة والتفويض تدعم التفاعل مع خدمات المصادقة والتفويض الرئيسية في الصناعة.
إذا كان لديك حاجة للتفاعل مع سلطات مصادقة أخرى، قم بزيارة GitHub لـ Apache APISIX واترك اقتراحاتك عبر issue؛ أو اشترك في قائمة البريد لـ Apache APISIX للتعبير عن أفكارك عبر البريد الإلكتروني.