استخدام Apache APISIX OpenID Connect Plugin للمصادقة المركزية للهوية
API7.ai
September 7, 2021
استخدام مكون Apache APISIX OpenID Connect لتكوين مصادقة Okta هو عملية بسيطة من ثلاث خطوات. يتيح لك التحول من وضع المصادقة التقليدية إلى وضع المصادقة المركزية للهوية. تصف الأقسام التالية الخطوات اللازمة لتكوين مصادقة Okta باستخدام مكون OpenID Connect لـ Apache APISIX.
مقارنة بوضع المصادقة التقليدية، يتمتع وضع المصادقة المركزية للهوية بالمزايا التالية:
- تبسيط عملية تطوير التطبيقات.
- تحسين أمان الأعمال.
المتطلبات الأساسية
يجب أن يكون لديك حساب Okta جاهز للاستخدام.
الخطوة 1: تكوين Okta
- سجل الدخول إلى حساب Okta الخاص بك، وانقر على "Create App Integration" لإنشاء تطبيق Okta.
- اختر "OIDC- OpenID Connect" كطريقة تسجيل الدخول، واختر "Web Application" كنوع التطبيق.
- قم بتعيين عنوان URL لإعادة التوجيه لتسجيل الدخول والخروج. "Sign-in redirect URIs" هي الروابط المسموح بإعادة توجيهها بعد تسجيل الدخول الناجح، و"Sign-out redirect URIs" هي الروابط التي يتم إعادة توجيهها بعد تسجيل الخروج الناجح. في هذا المثال، قمنا بتعيين كل من عناوين URL لإعادة توجيه تسجيل الدخول والخروج إلى http://127.0.0.1:9080/.
- بعد الانتهاء من الإعدادات، انقر على "Save" لحفظ التغييرات.
- قم بزيارة صفحة General للتطبيق للحصول على التكوين التالي، والذي يلزم لتكوين Apache APISIX OpenID Connect.
- معرف العميل (Client ID): معرف التطبيق، والذي يتوافق مع client_id أدناه.
- سر العميل (Client secret): مفتاح التطبيق، والذي يتوافق مع client_secret أدناه.
- نطاق Okta (Okta domain): اسم النطاق المستخدم من قبل التطبيق، والذي يتوافق مع {ISSUER} أدناه.
الخطوة 2: تثبيت Apache APISIX
تثبيت التبعيات
يتطلب بيئة تشغيل 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 Controller.
-
قم بفك ضغط حزمة مصدر 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. يقوم مثال الكود التالي بإنشاء مسار عبر واجهة برمجة تطبيقات Apache APISIX Admin، مع تعيين المسار العلوي إلى httpbin.org، وهي خدمة خلفية بسيطة لاستقبال الطلبات والرد عليها. سيتم استخدام صفحة get من httpbin.org. يرجى الرجوع إلى http bin get لمزيد من المعلومات. بالنسبة لعناصر التكوين المحددة، يرجى الرجوع إلى مكون Apache APISIX OpenID Connect.
يتم سرد حقول تكوين OpenID Connect أدناه:
الحقل | القيمة الافتراضية | الوصف |
---|---|---|
client_id | "" | معرف عميل OAuth. |
client_secret | "" | سر عميل OAuth. |
discovery | "" | نقاط نهاية اكتشاف الخدمة لمزودي الهوية. |
scope | openid | نطاق الموارد المطلوب الوصول إليها. |
relm | apisix | تحديد معلومات المصادقة في رأس استجابة WWW-Authenticate. |
bearer_only | false | ما إذا كان سيتم التحقق من الرمز المميز في رأس الطلب. |
logout_path | /logout | مسار تسجيل الخروج. |
redirect_uri | request_uri | عنوان URI الذي يعيد مزود الهوية التوجيه إليه، ويتم تعيينه افتراضيًا إلى عنوان الطلب. |
timeout | 3 | وقت انتهاء صلاحية الطلب، يتم تعريف الوحدة بالثواني. |
ssl_verify | false | التحقق من شهادة SSL لمزود الهوية. |
introspection_endpoint | "" | عنوان URL لنقطة نهاية التحقق من الرمز المميز لمزود الهوية، والذي سيتم استخراجه من الاستجابة إذا تم تركه فارغًا. |
introspection_endpoint_auth_method | client_secret_basic | اسم طريقة المصادقة للتحقق من الرمز المميز. |
public_key | "" | المفتاح العام لرمز المصادقة. |
token_signing_alg_values_expected | "" | خوارزمية لرموز المصادقة. |
set_access_token_header | true | ما إذا كان سيتم حمل رمز الوصول في رأس الطلب. |
access_token_in_authorization_header | false | ما إذا كان سيتم وضع رمز الوصول في رأس Authorization. يتم وضع رمز الوصول في رأس Authorization عندما تكون هذه القيمة صحيحة وفي رأس X-Access-Token عندما تكون خاطئة. |
set_id_token_header | true | ما إذا كان سيتم حمل رمز الهوية في رأس الطلب X-ID-Token. |
set_userinfo_header | true | ما إذا كان سيتم حمل معلومات المستخدم في رأس الطلب X-Userinfo. |
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_ISSUER}/.well-known/openid-configuration",
"scope":"openid profile",
"bearer_only":false,
"realm":"master",
"introspection_endpoint_auth_method":"client_secret_post",
"redirect_uri":"http://127.0.0.1:9080/"
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"httpbin.org:80":1
}
}
}'
التحقق
-
قم بزيارة "http://127.0.0.1:9080/get" وسيتم إعادة توجيه الصفحة إلى صفحة تسجيل الدخول Okta لأن مكون OpenID Connect مفعل.
-
أدخل اسم المستخدم وكلمة المرور لحساب Okta الخاص بالمستخدم وانقر على "Sign In" لتسجيل الدخول إلى حساب Okta الخاص بك.
-
بعد تسجيل الدخول الناجح، يمكنك الوصول إلى صفحة get في "httpbin.org". ستقوم صفحة "httpbin.org/get" بإرجاع البيانات المطلوبة مع X-Access-Token، X-Id-Token، و X-Userinfo كما يلي.
"X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****", "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****", "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"
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 إلى الخادم العلوي. يمكن للخادم العلوي تحليل هذه الرؤوس للحصول على معلومات هوية المستخدم وبيانات المستخدم.
لقد أظهرنا عملية بناء مصادقة هوية مركزية من Okta مباشرة إلى بوابة Apache APISIX. من السهل التسجيل للحصول على حساب Okta Developer مجاني للبدء. نهجنا يقلل من عبء المطورين ويوفر تجربة آمنة وسلسة.
حول Okta
Okta هو حل قابل للتخصيص وآمن وسهل الإضافة لتوفير خدمات المصادقة والتفويض لتطبيقاتك. احصل على مصادقة قابلة للتوسع مدمجة مباشرة في تطبيقك دون الحاجة إلى عبء التطوير والمخاطر الأمنية والصيانة التي تأتي مع برمجتها بنفسك. يمكنك توصيل أي تطبيق بأي لغة أو على أي منصة بـ Okta وتحديد كيفية تسجيل دخول المستخدمين. في كل مرة يحاول المستخدم المصادقة، سيقوم Okta بالتحقق من هويته وإرسال المعلومات المطلوبة إلى تطبيقك.
حول Apache APISIX
Apache APISIX هو بوابة API ديناميكية وفعالة وعالية الأداء. يوفر Apache APISIX ميزات غنية لإدارة حركة المرور مثل موازنة الحمل، والخادم العلوي الديناميكي، والإصدار التدريجي، وكسر الدائرة، والمصادقة، والمراقبة، والمزيد. يمكنك استخدام Apache APISIX للتعامل مع حركة المرور التقليدية من الشمال إلى الجنوب، وكذلك حركة المرور بين الخدمات من الشرق إلى الغرب. يمكن أيضًا استخدامه كوحدة تحكم دخول k8s.
استخدمت المئات من الشركات حول العالم Apache APISIX، بما في ذلك ناسا، المصنع الرقمي للاتحاد الأوروبي، TravelSky، Tencent، Huawei، Weibo، China Mobile، Taikang، 360، وغيرها.
Github: https://github.com/apache/apisix
الموقع الإلكتروني: https://apisix.apache.org