كيفية استخدام Apache APISIX Auth مع Okta
Fei Han
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 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.
-
قم بفك ضغط حزمة مصدر 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 للتعامل مع حركة المرور التقليدية من الشمال إلى الجنوب، وكذلك حركة المرور بين الخدمات من الشرق إلى الغرب. يمكن أيضًا استخدامه كوحدة تحكم ingress لـ k8s.
استخدمت المئات من الشركات حول العالم Apache APISIX، بما في ذلك ناسا، والمصنع الرقمي للاتحاد الأوروبي، وTravelSky، وتينسنت، وهواوي، وWeibo، وChina Mobile، وTaikang، و360، وغيرها.
Github: https://github.com/apache/apisix
الموقع الإلكتروني: https://apisix.apache.org